【发布时间】:2017-07-26 15:38:52
【问题描述】:
我有一个巨大的 xml 文档,我只想从中提取某些数据。该文件的链接是: https://pastebin.com/mNXWt7dz
我想解析这个 xml 结构以从 xml 的每个 wireless-client 节点内的每个 client-mac、client-manuf 和 last_signal_dbm 获取值。文档中还有很多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-network 的第一个 wireless-client 节点的值。我想要来自所有具有相同名称的节点的值。我该怎么办?我已经尝试过其他 xml 解析器,但它们似乎都不适合我。
【问题讨论】:
-
顺便说一句——您的 XML 文件说它是使用 ISO-8859-1 字符编码编写的,但您正在使用 ASCII 字符编码读取它。
-
会不会导致解析出现问题?
-
这可能是因为元素和属性names 中的字符不必来自C0 Controls and Basic Latin 块。它还可能损坏文本和 cmets。我并不是说这是你当前的问题,只是它打破了字符编码的基本规则:用用于写作的编码来阅读。
-
好的!所以我应该把它改成iso。对吗?
-
看来nodejs本质上不支持ISO-8859-1。 read-xml 可能会有所帮助。也许您可以将它与 camaro 一起使用。
标签: javascript node.js xml parsing