我有一个巨大的xml文档,我想从中提取某些数据。该文件的链接是: https://pastebin.com/mNXWt7dz
我想解析这个xml结构,以从xml的每个client-mac
节点内的每个client-manuf
,last_signal_dbm
和wireless-client
获取值。文档中还有许多wireless-network
个节点。
我正在使用以下js代码:
var libxmljs = require("libxmljs");
var fs = require("fs");
var xmlPath = "./Kismet.netxml";
var fileData = fs.readFileSync(xmlPath, 'ascii');
var xmlDoc = libxmljs.parseXml(fileData);
var children = xmlDoc.root();
console.log(children.get("//wireless-network//wireless-client//client-mac").text());
使用此代码我只能解析第一个wireless-client
的第一个wireless-network
节点的值。我想要来自所有具有相同名称的节点的值。我该怎么办?我已经尝试过其他xml解析器,但它们似乎都不适用于我。
答案 0 :(得分:2)
尝试下面的代码段。有关详细信息,请check the docs
模板是xpath之类的。例如,以下模板转换为:查找路径//wireless-network/wireless-client
处的所有节点;对于每个节点,提取client-mac
并放入对象的mac
字段,client-manuf
并放入manuf
字段,依此类推。
const transform = require('camaro')
const xml = `
xml goes here
`
const template = {
wirelessClients: ['//wireless-network/wireless-client', {
mac: 'client-mac',
manuf: 'client-manuf',
lastSignalDbm: 'snr-info/last_signal_dbm'
}]
}
const result = transform(xml, template)
console.log(JSON.stringify(result, null, 2))
输出
{
"wirelessClients": [
{
"lastSignalDbm": "-30",
"mac": "00:08:22:26:E8:FB",
"manuf": "Unknown"
},
{
"lastSignalDbm": "-96",
"mac": "00:62:EC:4A:68:9A",
"manuf": "Unknown"
},
{
"lastSignalDbm": "-88",
"mac": "00:A6:CA:F6:4D:3F",
"manuf": "Unknown"
},
{
"lastSignalDbm": "-90",
"mac": "00:A6:CA:F6:61:7F",
"manuf": "Unknown"
},
{
"lastSignalDbm": "-88",
"mac": "00:D7:8F:FE:EF:20",
"manuf": "Unknown"
}
]
}