我正在尝试解析Sonos订阅的XML输出我在Node.js中这样做 我已经尝试了两个不同的npm模块,xml2js和libxmljs,但我似乎无法做到正确。 我找到的所有示例都是一个简单的XML,但我试图解析一个更高级的文件,当你知道如何处理它时可能不会更难。
我希望有人可以帮助我,以便我了解如何处理这样的文件。 在我的例子中,我想要来自的值:
<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>
感谢。
答案 0 :(得分: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'