我正在环顾四周,没有看到在Node中解析XML的明显方法。我假设有一些相对直接的XML对象,我可以传递一个String或url,但我没有在规范中找到类似的东西。我需要外部lib吗?如果是的话,你们会推荐哪一个?我不需要xPath(虽然我不介意)只要我能以明显的方式走树(测试nodeType == ElementNode并循环遍历子节点)。
答案 0 :(得分:6)
我建议xml2js,一个简单的XML to JavaScript对象转换器。然后,您可以迭代生成的对象。页面中的代码段:
var parseString = require('xml2js').parseString;
var xml = "<root>Hello xml2js!</root>"
parseString(xml, function (err, result) {
console.dir(result);
});
您可以使用npm install xml2js
答案 1 :(得分:1)
列出了各种各样的XML模块here,也许您可以找到最适合您的模块。我所知道的一个流行的是sax-js。如果您已经熟悉该库,还有libxml bindings。
答案 2 :(得分:1)
如果绝对要求必须在服务器端完成,那么在客户端上,您可以使用XMLSerializer解析为字符串,并使用DOMParser解析为DOM。
XMLSerializer示例(从DOM到字符串):
var XMLS = new XMLSerializer();
var elem = document;
var xml_str = XMLS.serializeToString(elem);
console.log(xml_str);
DOMParser示例(从字符串到DOM):
var parser = new DOMParser();
var doc = parser.parseFromString(xml_str, "application/xml");
console.log(doc);
答案 3 :(得分:0)
如果您将Express与主体解析器一起使用,则最简单的方法是使用express-xml-bodyparser。它允许根据情况来解析所有路由或特定路由的XML
所有路线:
const xmlparser = require('express-xml-bodyparser');
// .. other middleware ...
app.use(express.json());
app.use(express.urlencoded());
app.use(xmlparser());
// ... other middleware ...
app.post('/receive-xml', function(req, res, next) {
// req.body contains parsed XML as JSON
});
特定路线:
app.post('/receive-xml', xmlparser({trim: false, explicitArray: false}), function(req, res, next) {
// req.body contains parsed XML as JSON
});