Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst] xml Daten einer URL weiterverarbeiten

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.6k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.9k

[gelöst] xml Daten einer URL weiterverarbeiten

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
27 Beiträge 6 Kommentatoren 10.2k Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • BluefoxB Offline
    BluefoxB Offline
    Bluefox
    schrieb am zuletzt editiert von
    #16
    var parseString = require('xml2js').parseString;
    var request = require('request');
    
    request('http://192.168.178.xx:8090/now_playing', function (error, response, body) {
        if (!error && response.statusCode == 200) {
    		log("Body: " + body);
    
    		parseString(body, {
    				explicitArray: false,
    				mergeAttrs: true
    			}, 
    			function (err, result) {
    				if (err) {
    					log("Fehler: " + err);
    				} else {
    					log("Result: " + JSON.stringify(result.nowPlaying));
    				}
    			});
    	} else  {
    	  log(error);
    	}
    });
    
    1 Antwort Letzte Antwort
    0
    • Y Offline
      Y Offline
      ykuendig
      schrieb am zuletzt editiert von
      #17

      Ich hab kein Bose. Aber der String kopiert und eingefügt hatte bei mir auch Probleme gemacht. Kann es sein, dass das result noch irgend wie gefiltert und / oder utf-8-ed werden muss?

      Gruss Yves

      1 Antwort Letzte Antwort
      0
      • BluefoxB Offline
        BluefoxB Offline
        Bluefox
        schrieb am zuletzt editiert von
        #18

        @ykuendig:

        Ich hab kein Bose. Aber der String kopiert und eingefügt hatte bei mir auch Probleme gemacht. Kann es sein, dass das result noch irgend wie gefiltert und / oder utf-8-ed werden muss? `
        Bei mir funktioniert das:

        var parseString = require('xml2js').parseString;
        var request = require('request');
        
        //request('http://192.168.178.xx:8090/now_playing', function (error, response, body) {
            //if (!error && response.statusCode == 200) {
            var body = '<nowplaying deviceid="08DF1F46E63F" source="INTERNET_RADIO"><contentitem source="INTERNET_RADIO" location="32759" sourceaccount/ispresetable="true"><itemname>WDR 2 Münsterland</itemname></contentitem><track><artist></artist><album></album><stationname>WDR 2 Münsterland</stationname><art artimagestatus="IMAGE_PRESENT">http://logo.vtuner.net/007452/logo/logo-32759.jpg</art><playstatus>PLAY_STATE</playstatus><description>MP3  128 kbps  Internet Only,  Aktuelle Infos, Sport, Service und Unterhaltung prägen WDR 2\. Dazu aktuelle Hits und erwachsene Rock und Popmusik der letzten 30 Jahre.</description><stationlocation>Internet Only</stationlocation></nowplaying>';
              log("Body: " + body);
        
              parseString(body, {
                    explicitArray: false,
                    mergeAttrs: true
                 }, 
                 function (err, result) {
                    if (err) {
                       log("Fehler: " + err);
                    } else {
                       log("Result: " + JSON.stringify(result.nowPlaying));
                    }
                 });
           //} else  {
           //  log(error);
           //}
        //});
        

        Output:

        javascript-0	2015-06-15 21:45:30	info	script.js.Script1: registered 0 subscriptions and 0 schedules
        javascript-0	2015-06-15 21:45:30	info	script.js.Script1: Result: {'deviceID':'08DF1F46E63F','source':'INTERNET_RADIO','ContentItem':{'source':'INTERNET_RADIO','location':'32759','sourceAccount':'','isPresetable':'true','itemName':'WDR 2 Münsterland'},'track':'','artist':'','album':'','stationName':'WDR 2 Münsterland','art':{'_':'http://logo.vtuner.net/007452/logo/logo-32759.jpg','artImageStatus':'IMAGE_PRESENT'},'playStatus':'PLAY_STATE','description':'MP3 128 kbps Internet Only, Aktuelle Infos, Sport, Service und Unterhaltung prägen WDR 2\. Dazu aktuelle Hits und erwachsene Rock und Popmusik der letzten 30 Jahre.','stationLocation':'Internet Only'}
        javascript-0	2015-06-15 21:45:30	info	script.js.Script1: Body: WDR 2 MünsterlandWDR 2 Münsterlandhttp://logo.vtuner.net/007452/logo/logo-32759.jpgPLAY_STATEMP3 128 kbps Internet Only, Aktuelle Infos, Sport, Service und Unterhaltung prägen WDR 2\. Dazu aktuelle Hits und erwachsene Rock und Popmusik der letzten 30 Jahre.Internet Only
        javascript-0	2015-06-15 21:45:30	info	Start javascript script.js.Script1
        
        
        1 Antwort Letzte Antwort
        1
        • htreckslerH Offline
          htreckslerH Offline
          htrecksler
          Forum Testing
          schrieb am zuletzt editiert von
          #19

          yes…

          Der code

          var parseString = require('xml2js').parseString;
          var request = require('request');
          
          request('http://192.168.178.26:8090/now_playing', function (error, response, body) {
              if (!error && response.statusCode == 200) {
              //var body = '<nowplaying deviceid="08DF1F46E63F" source="INTERNET_RADIO"><contentitem source="INTERNET_RADIO" location="32759" sourceaccount/ispresetable="true"><itemname>WDR 2 Münsterland</itemname></contentitem><track><artist></artist><album></album><stationname>WDR 2 Münsterland</stationname><art artimagestatus="IMAGE_PRESENT">http://logo.vtuner.net/007452/logo/logo-32759.jpg</art><playstatus>PLAY_STATE</playstatus><description>MP3  128 kbps  Internet Only,  Aktuelle Infos, Sport, Service und Unterhaltung prägen WDR 2\. Dazu aktuelle Hits und erwachsene Rock und Popmusik der letzten 30 Jahre.</description><stationlocation>Internet Only</stationlocation></nowplaying>';
                log("Body: " + body);
          
                parseString(body, {
                      explicitArray: false,
                      mergeAttrs: true
                   }, 
                   function (err, result) {
                      if (err) {
                         log("Fehler: " + err);
                      } else {
                         log("Result: " + JSON.stringify(result.nowPlaying));
                      }
                   });
             } else  {
               log(error);
             }
          });
          
          

          funktioniert. Zumindest habe ich jetzt keine Fehler mehr in der log-Datei.

          Jetzt brauch ich nur noch ein Beispiel wie ich daraus die einzelnen Werte selektieren kann.

          Kann ich dass jetzt wie ein Objekt ansprechen?

          Gruss Hermann

          ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

          1 Antwort Letzte Antwort
          1
          • BluefoxB Offline
            BluefoxB Offline
            Bluefox
            schrieb am zuletzt editiert von
            #20

            Als Ergebnis hast du ein Objekt:

            {"nowPlaying":
               {
            	'deviceID' : '08DF1F46E63F',
            	'source' : 'INTERNET_RADIO',
            	'ContentItem' : {
            		'source' : 'INTERNET_RADIO',
            		'location' : '32759',
            		'sourceAccount' : '',
            		'isPresetable' : 'true',
            		'itemName' : 'WDR 2 Münsterland'
            	},
            	'track' : '',
            	'artist' : '',
            	'album' : '',
            	'stationName' : 'WDR 2 Münsterland',
            	'art' : {
            		'_' : 'http://logo.vtuner.net/007452/logo/logo-32759.jpg',
            		'artImageStatus' : 'IMAGE_PRESENT'
            	},
            	'playStatus' : 'PLAY_STATE',
            	'description' : 'MP3 128 kbps Internet Only, Aktuelle Infos, Sport, Service und Unterhaltung prägen WDR 2\. Dazu aktuelle Hits und erwachsene Rock und Popmusik der letzten 30 Jahre.',
            	'stationLocation' : 'Internet Only'
               }
            }
            

            Und ja das ist ein Objekt. Wenn du z.B. artImageStatus extrahieren willst dann solltest du result.nowPlaying.art.artImageStatus aufrufen.

            1 Antwort Letzte Antwort
            0
            • htreckslerH Offline
              htreckslerH Offline
              htrecksler
              Forum Testing
              schrieb am zuletzt editiert von
              #21

              Perfekt, funktioniert. Danke Euch allen.

              Gruss Hermann

              ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

              1 Antwort Letzte Antwort
              0
              • M Offline
                M Offline
                mameier1234
                schrieb am zuletzt editiert von
                #22

                Ich muss hier leider nochmal nachfragen…

                ich kann meinen Heizölstand elektronisch abfragen.. unter http://192.168.xx.xx/xml bekomme ich vollgendes Ergebniss

                This XML file does not appear to have any style information associated with it. The document tree is shown below.
                 <seqsmartbox xmlns="http://tecson.dev.oilview.de/gateway/xsd" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xsi:schemalocation="http://tecson.dev.oilview.de/gateway/xsd/smartbox.xsd"><seqheader><indication>Manuelle Abfrage</indication>
                <authcode>03B41236A899</authcode>
                 <devoperator><devlocation><devid>2-852</devid>
                <devversion>V6.02</devversion></devlocation></devoperator></seqheader> 
                 <seqdata><seqtanks><tanknumber>1</tanknumber>
                <tankname>Heizöl</tankname>
                 <seqtanklevel><tanklevel>490</tanklevel>
                <tankunit>L</tankunit></seqtanklevel> 
                <tankpercent>5</tankpercent>
                 <seqtanksize><tanksize>10000</tanksize>
                <tankunit>L</tankunit></seqtanksize> 
                 <seqtankclear><tankclearance>9010</tankclearance>
                <tankunit>L</tankunit></seqtankclear></seqtanks></seqdata> 
                 <seqpara><para1>30</para1>
                <para2>15</para2>
                <para4>0</para4>
                <para5>5</para5>
                <para9>0</para9></seqpara></seqsmartbox> 
                

                Was mich nun interessiert ist der wert von <tanklevel>490</tanklevel> …. also nur 490 in einem Objekt...

                Ganz ehrlich... ich bekomms nicht hin.

                Hat mir da noch jemand eine Idee ?

                das mit dem xml2js habe ich schon probiert... Allerdings kann man unter Admin3 wohl keine Module mehr eintragen.. Der Save Button wird nicht aktiv... Zur Zeit ist es bei mir noch so, dass wenn ich über iobroker.pro gehe und damit die Admin Seite aufrufe noch eine 2.x Version kommt. Hier kann ich die xml2js eintragen (und die ist nachher auch in der 3.0 eingetragen..)

                Ich bekomme nur einen "Error: Parse Error" , wenn ich das hier ausführe:

                var parseString = require('xml2js').parseString;
                var request = require('request');
                
                request('http://192.168.160.80/xml', function (error, response, body) {
                    if (!error && response.statusCode == 200) {
                     log("Body: " + body);
                
                      parseString(body, {
                            explicitArray: false,
                            mergeAttrs: true
                         }, 
                         function (err, result) {
                            if (err) {
                               log("Fehler: " + err);
                            } else {
                               log("Result: " + JSON.stringify(result.tankLevel));
                            }
                         });
                   } else  {
                     log(error);
                   }
                });
                

                Irgendwelche Vorschläge ?

                Grüße,

                Martin

                1 Antwort Letzte Antwort
                0
                • ruhr70R Offline
                  ruhr70R Offline
                  ruhr70
                  schrieb am zuletzt editiert von
                  #23

                  @mameier1234:

                  Allerdings kann man unter Admin3 wohl keine Module mehr eintragen.. Der Save Button wird nicht aktiv… Zur Zeit ist es bei mir noch so, dass wenn ich über iobroker.pro gehe und damit die Admin Seite aufrufe noch eine 2.x Version kommt. Hier kann ich die xml2js eintragen (und die ist nachher auch in der 3.0 eingetragen..) `

                  Da bin ich auch drüber gestolpert. :-)

                  Du musst , wenn Du im Javascript-Adapter den Modulnamen eingegeben hast, [ENTER] drücken.

                  Ich bin anfangs immer mit [TAB] weiter und dann wird der Speicherbutton nicht aktiv.

                  Benötigst Du nur diesen einen Wert? <tanklevel>490</tanklevel>

                  Das ist dann wahrscheinlich am Einfachsten, wenn Du einfach den Parser oder Systeminfo-Adapter nimmst oder im Skript

                  Ein Beispiel für ein Regex für den Wert: https://regex101.com/r/uoymuu/1

                  Adapter: Fritzbox, Unify Circuit
                  Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                  1 Antwort Letzte Antwort
                  0
                  • M Offline
                    M Offline
                    mameier1234
                    schrieb am zuletzt editiert von
                    #24

                    Morgen…

                    Danke für den Tipp...

                    Das mit dem Sysinfo-Adapter hatte ich versucht... es scheiterte aber an der richtigen Regex...

                    Nun kommt mit dem Parsermodul: arser.0 2018-02-22 07:06:51.277 error Cannot read link "http://192.168.160.80/xml": Error: Parse Error

                    parser.0 2018-02-22 07:06:41.244 error Cannot read link "http://192.168.160.80/xml": Error: Parse Error

                    Sysinfo: ähnliche Fehlermeldung...
                    4885_parser.png

                    Grüße,

                    Martin

                    1 Antwort Letzte Antwort
                    0
                    • ruhr70R Offline
                      ruhr70R Offline
                      ruhr70
                      schrieb am zuletzt editiert von
                      #25

                      Du bekommst beim Skript, Parser Adapter und Systeminfo Adapter jeweils einen parse Error.

                      Was bekommst Du denn im Log als Ausgabe, wenn Du bei Deinem Skript den Teil mit parseString weglässt.

                            parseString(body, {
                                  explicitArray: false,
                                  mergeAttrs: true
                               }, 
                               function (err, result) {
                                  if (err) {
                                     log("Fehler: " + err);
                                  } else {
                                     log("Result: " + JSON.stringify(result.tankLevel));
                                  }
                               });
                      
                      

                      Wird mit der Zeile log("Body: " + body); denn der Inhalt der XML im Log ausgegeben?

                      Adapter: Fritzbox, Unify Circuit
                      Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                      mac89mucM 1 Antwort Letzte Antwort
                      0
                      • M Offline
                        M Offline
                        mameier1234
                        schrieb am zuletzt editiert von
                        #26

                        Aeeh…. Ne!

                        Grüße,

                        Martin

                        1 Antwort Letzte Antwort
                        0
                        • ruhr70R ruhr70

                          Du bekommst beim Skript, Parser Adapter und Systeminfo Adapter jeweils einen parse Error.

                          Was bekommst Du denn im Log als Ausgabe, wenn Du bei Deinem Skript den Teil mit parseString weglässt.

                                parseString(body, {
                                      explicitArray: false,
                                      mergeAttrs: true
                                   }, 
                                   function (err, result) {
                                      if (err) {
                                         log("Fehler: " + err);
                                      } else {
                                         log("Result: " + JSON.stringify(result.tankLevel));
                                      }
                                   });
                          
                          

                          Wird mit der Zeile log("Body: " + body); denn der Inhalt der XML im Log ausgegeben?

                          mac89mucM Offline
                          mac89mucM Offline
                          mac89muc
                          schrieb am zuletzt editiert von
                          #27

                          @ruhr70

                          Hallo zusammen,

                          ich habe eine ähnliches Problem beim auslesen meines Akkustandes vom Sonos Move, habe allerdings einen neuen Thread dazu aufgemacht nachdem der Hinweis mit dem hohen Alter dieses Threads beim erstellen meiner Antwort aufkam.

                          Keine Ahnung wie sich das mit Doppelpostings verhält, daher möchte ich ungern hier nochmal alles komplett posten.
                          Falls sich jemand findet, der hier schon mal helfen konnte und bereit ist sich mein Problem unter folgendem Link hier im Forum anzusehen wäre ich dankbar.

                          [https://forum.iobroker.net/topic/44272/xml-return-in-blockly-weiter-verarbeiten](Neuer Forumsbeitrag - XML return in Blockly weiterverarbeiten)

                          Vielen Dank im Voraus - Gruß

                          1 Antwort Letzte Antwort
                          0
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          835

                          Online

                          32.4k

                          Benutzer

                          81.5k

                          Themen

                          1.3m

                          Beiträge
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                          ioBroker Community 2014-2025
                          logo
                          • Anmelden

                          • Du hast noch kein Konto? Registrieren

                          • Anmelden oder registrieren, um zu suchen
                          • Erster Beitrag
                            Letzter Beitrag
                          0
                          • Home
                          • Aktuell
                          • Tags
                          • Ungelesen 0
                          • Kategorien
                          • Unreplied
                          • Beliebt
                          • GitHub
                          • Docu
                          • Hilfe