NEWS
[gelöst]wie richtig einsetzen? npm Modul xml-js
-
ich habe eine xml datei die ich parden möchte
da die Daten (icontype und title) an die ich heran möchte als Atribute eingetragen sind weiß ich jetzt nicht wie ich diese parsen kann. Ich möchte diese in einer for Schleife weiterverarbeiten…
Gruß
Sveni-Lee
-
ich hab's jetzt mal mit "try and error" probiert aber ich bekomme einfach kein Ergebnis
var xmlstring =''; var xml2js = require('xml2js'); var parser = new xml2js.Parser(); on({id:"onkyo-vis.0.net-usb-list-info-allitems", change: "any"}, function (obj) { xmlstring = getState("onkyo-vis.0.net-usb-list-info-allitems").val; parser.parseString(xmlstring, function (err, result) { log('RESULT: '+ result['response']['items']); }); });
ich bekomme aber kein ergebniss, sondern nur javascript.0 2018-07-02 16:07:18.119 info script.js.common.Onkyo_Player: RESULT: [object Object]
ich komm einfach nicht darauf wie ich an die Attribute icontype und title komme…
EDIT:
kleiner schritt nach vorn... log('RESULT= ' + JSON.stringify(result)); gibt mit etwas aus…
-
Wenn das Objekt result im Log angezeigt werden soll, muss es in einen JSON-String konvertiert werden.
log('RESULT: '+ JSON.stringify(result['response']['items']));
-
ja… danke. Jetzt habe ich eine Ergebniss...
[{'/r>:{'offset':'0','totalitems':'3'},'item':[{'/r>:{'icontype':'N','iconid':'2b','title':'GOTHAM-CITY'}},{'/r>:{'icontype':'N','iconid':'2b','title':'FRITZ-NAS'}},{'/r>:{'icontype':'N','iconid':'2b','title':'TABLET'}}]}]
wie kann dieses Objekt in einer for-schleife auswerten?
-
Das ist ein Array im Array. Angenommen der Variablenname ist obj, dann versuche es mal so:
`var item = obj[0].item; for(let i = 0; i < item.length; i++) { log('Titel' + (i+1) + ': ' + item[i].$.title); }` EDIT: Korrigiert (.$ eingefügt).[/i]
-
hmm… das wirft bei mir einen Fehler aus...
Error in callback: Error: Uncaught, unspecified "error" event. (TypeError: Cannot read property 'item' of undefined
-
Hast Du das Objekt verwendet, das mittels JSON.stringify() im Log ausgegeben wurde ?
Ich habe es damit erfolgreich getestet.
-
:roll: natürlich… genau das war es.. jetzt klappt es...
DANKE!
-
jetzt klappt es… `
Dann markiere bitte das Thema im Betreff des ersten Beitrags als [gelöst]. -
da ich versuche das ganze jetzt irgendwie in ein Widget zu packen hab ich da noch mal eine Frage,kann ich das ganze in die *js in mein Widget bekommen… ich habe xml2js und parser in den Widget ordner installiert aber irgendwie kommt er mit der Zeile
var parser = new xml2js.Parser({ explicitArray: true })
nicht klar… muß ich parser auch erst nocht irgendwie mit require aufrufen?
-
ich habe xml2js und parser in den Widget ordner installiert `
Das soll funktionieren ?? -
nein, das tut es ja eben nicht…
meine nächste Idee ist es die xml in ein JSON zu wandeln, das klappt auch schon im Adapter:
{"response":{"$":{"status":"ok"},"items":[{"$":{"offset":"0","totalitems":"3"},"item":[{"$":{"icontype":"N","iconid":"2b","title":"TABLET"}},{"$":{"icontype":"N","iconid":"2b","title":"GOTHAM-CITY"}},{"$":{"icontype":"N","iconid":"2b","title":"FRITZ-NAS"}}]}]}}
jetzt muss ich nur wieder an die icontype, iconid und title rankommen und das auch wieder in einer schleife…
Ich habe zwar schon einiges zu JSON.parse gefunden aber hier ist glaube ich ein Array in einem Array in einem JSON und damit bin ich überfordert…
-
`var item = obj.response.items[0].item; for(let i = 0; i < item.length; i++) { log('Titel' + (i+1) + ': ' + item[i].$.title); log('Icontype' + (i+1) + ': ' + item[i].$.icontype); }` [/i][/i]
-
perfekt… Danke
mal schaun ob ich damit weiter komme...
-
hier mal ein kleiner Teilerfolg…
ich kann jetzt schon erfolgreich durch Home-Media browsen…
~~![](</s><URL url=)https://i.imgur.com/pltlLQU.jpg" />
jetzt muß ich noch irgendwie beides zusammen in ein Widget bringen…~~