2017-05-01 105 views
1

我想解析Sonos訂閱的XML輸出我在Node.js中做了這個 我嘗試了兩個不同的npm模塊,xml2js和libxmljs,但我似乎無法正確理解。 我找到的所有示例都是簡單的XML,但我試圖解析更高級的文件,並且在知道如何處理時可能並不困難。從Sonos解析XML

我希望有人能幫助我,讓我明白如何解決這樣的文件。 在我的例子,然後我想從價值22:

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

下面是XML文件

<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> 

感謝。

回答

1

試試這個代碼:

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

感謝。 這是一個非常簡單的解決方案,它效果很好。 –