2017-05-01 10 views
1

Ich versuche, die XML-Ausgabe von Sonos-Abonnement analysieren Ich mache das in Node.js Ich habe versucht, zwei verschiedene Npm-Module, Xml2js und Libxmljs, aber ich kann nicht scheinen, es richtig zu bekommen. Alle Beispiele, die ich gefunden habe, ist ein einfaches XML, aber ich versuche, eine erweiterte Datei zu analysieren und wahrscheinlich nicht viel schwieriger, wenn Sie wissen, wie man damit umgeht.Parse XML von Sonos

Ich hoffe, jemand könnte mir helfen, so dass ich verstehe, wie man eine Datei wie diese anpackt. In meinem Beispiel dann möchte ich den Wert 22 aus:

<Volume channel="Master" val="22"/> 

Hier ist der XML-Datei

<e:propertyset 
xmlns:e="urn:schemas-upnp-org:event-1-0"> 
<e:property> 
    <LastChange> 
     <Event 
      xmlns="urn:schemas-upnp-org:metadata-1-0/RCS/"> 
      <InstanceID val="0"> 
       <Volume channel="Master" val="22"/> 
       <Volume channel="LF" val="100"/> 
       <Volume channel="RF" val="100"/> 
       <Mute channel="Master" val="0"/> 
       <Mute channel="LF" val="0"/> 
       <Mute channel="RF" val="0"/> 
       <Bass val="0"/> 
       <Treble val="0"/> 
       <Loudness channel="Master" val="1"/> 
       <OutputFixed val="0"/> 
       <HeadphoneConnected val="0"/> 
       <SpeakerSize val="5"/> 
       <SubGain val="0"/> 
       <SubCrossover val="0"/> 
       <SubPolarity val="0"/> 
       <SubEnabled val="1"/> 
       <SonarEnabled val="0"/> 
       <SonarCalibrationAvailable val="0"/> 
       <PresetNameList val="FactoryDefaults"/> 
      </InstanceID> 
     </Event> 
    </LastChange> 
</e:property> 

Dank.

Antwort

1

Versuchen Sie diesen Code:

var DOMParser = require('xmldom').DOMParser; 
var xmltext = `<e:propertyset xmlns:e="urn:schemas-upnp-org:event-1-0"> 
    <e:property> 
     <LastChange> 
      <Event xmlns="urn:schemas-upnp-org:metadata-1-0/RCS/"> 
       <InstanceID val="0"> 
        <Volume channel="Master" val="22"/> 
        <Volume channel="LF" val="100"/> 
        <Volume channel="RF" val="100"/> 
        <Mute channel="Master" val="0"/> 
        <Mute channel="LF" val="0"/> 
        <Mute channel="RF" val="0"/> 
        <Bass val="0"/> 
        <Treble val="0"/> 
        <Loudness channel="Master" val="1"/> 
        <OutputFixed val="0"/> 
        <HeadphoneConnected val="0"/> 
        <SpeakerSize val="5"/> 
        <SubGain val="0"/> 
        <SubCrossover val="0"/> 
        <SubPolarity val="0"/> 
        <SubEnabled val="1"/> 
        <SonarEnabled val="0"/> 
        <SonarCalibrationAvailable val="0"/> 
        <PresetNameList val="FactoryDefaults"/> 
       </InstanceID> 
      </Event> 
     </LastChange> 
    </e:property> 
    </e:propertyset>`; 

var doc = new DOMParser().parseFromString(xmltext, "application/xml"); 
var docElem = doc.documentElement; 
var Volume = docElem.getElementsByTagName('Volume'); 
//console.log(Volume.toString()); 
//Volume.length; //3 

console.log(Volume[0].getAttribute("val"));  //'22' 
console.log(Volume[0].getAttribute("channel")); //'Master' 
+0

Dank. Das war eine sehr einfache Lösung und es funktioniert großartig. –