我正在使用xml2js
var fs = require('fs'),
xml2js = require('xml2js');
var parser = new xml2js.Parser();
fs.readFile(path, function(err, data) {
parser.parseString(data, function (err, result) {
console.dir(result['QCapsule']['AlarmLog'][0]['AlarmLogItem'][0].AlarmCode); });
});
我的xml文件看起来像
<QCapsule id="1" name="ALARMS">
....
.....
<AlarmLog itemCount="1">
<AlarmLogItem listIndex="0">
<EntryType>1</EntryType>
<AlarmCode>180</AlarmCode>
....
....
的输出
result['QCapsule']['AlarmLog'][0]['AlarmLogItem'][0].AlarmCode
说[&#39; 180&#39; ]。有没有办法在不使用字符串函数的情况下获得没有[]的值。或者是nodejs有更好的xml解析器。
答案 0 :(得分:1)
您可以尝试:
var path = 'testxml.xml';
var fs = require('fs');
var xml2js = require('xml2js');
var parser = new xml2js.Parser();
var xml = fs.readFileSync(path);
parser.parseString(xml, function (err, result) {
if (err) {
console.error('xml2js.parseString: Error occurred: ', err);
} else {
console.log(JSON.stringify(result, null, 2));
console.log('AlarmCode: ', result.QCapsule.AlarmLog[0].AlarmLogItem[0].AlarmCode[0]);
}
});
像这样更改代码,你不需要那些恼人的[0]数组索引操作符。
var path = 'testxml.xml';
var fs = require('fs');
var xml2js = require('xml2js');
var parser = new xml2js.Parser({explicitArray: false});
var xml = fs.readFileSync(path);
parser.parseString(xml, function (err, result) {
if (err) {
console.error('xml2js.parseString: Error occurred: ', err);
} else {
console.log(JSON.stringify(result, null, 2));
console.log('AlarmCode: ', result.QCapsule.AlarmLog.AlarmLogItem[0].AlarmCode);
}
});
请记住,如果XML数据中有多个子元素,则需要使用索引操作符。
xml2js的“选项”部分还有一些其他有用的选项。
我认为xml2js是一个非常好的XML解析器,它做了很多!
我用Xml进行了测试,看起来像这样:
<QCapsule id="1" name="ALARMS">
<AlarmLog itemCount="2">
<AlarmLogItem listIndex="0">
<EntryType>1</EntryType>
<AlarmCode>180</AlarmCode>
</AlarmLogItem>
<AlarmLogItem listIndex="1">
<EntryType>1</EntryType>
<AlarmCode>101</AlarmCode>
</AlarmLogItem>
</AlarmLog>
</QCapsule>
打印所有报警功能也很有用:
var printAllAlarms = function(alarmLogItems) {
console.log(`PrintAllAlarms: Total alarm(s): ${alarmLogItems.length}`);
alarmLogItems.forEach((alarmLog) => { ;
console.log(`AlarmLogItem: EntryType: ${alarmLog.EntryType} AlarmCode: ${alarmLog.AlarmCode}`);
});
}
printAllAlarms(result.QCapsule.AlarmLog.AlarmLogItem);