在Node.js中解析XML字符串的最简单方法是什么?

时间:2013-03-13 03:04:49

标签: xml node.js

我正在环顾四周,没有看到在Node中解析XML的明显方法。我假设有一些相对直接的XML对象,我可以传递一个String或url,但我没有在规范中找到类似的东西。我需要外部lib吗?如果是的话,你们会推荐哪一个?我不需要xPath(虽然我不介意)只要我能以明显的方式走树(测试nodeType == ElementNode并循环遍历子节点)。

4 个答案:

答案 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  
});