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

6
我在搜索中没有看到一种明显的方法来解析XML。我假设有一些相对简单的XML对象,可以将字符串或URL传递给它,但是我在规范中没有找到类似的东西。我需要一个外部库吗?如果需要,你们会推荐哪一个呢?我不需要xPath(虽然我不介意),只要能以明显的方式遍历树形结构(测试节点类型== ElementNode并循环遍历子节点)。
4个回答

14

我建议使用xml2js,这是一个简单的XML转JavaScript对象的转换器。然后您可以迭代生成的对象。以下是页面上的代码片段:

var parseString = require('xml2js').parseString;
var xml = "<root>Hello xml2js!</root>"
parseString(xml, function (err, result) {
    console.dir(result);
});

您可以使用npm install xml2js进行安装。


3

这里列出了各种XML模块,链接在此,也许你可以找到最适合你的那个。我知道的一个受欢迎的模块是sax-js。如果你已经熟悉该库,则还有libxml绑定可用。


3
第一个链接失效了。 - citykid

0
如果您正在使用Express和body parser,最简单的方法是使用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  
});

-4
如果不是必须在服务器端完成,那么在客户端您可以使用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);

我的环境中没有“客户端”。实际上,这是为了解析以XML形式从第三方提供商返回给cron进程的响应。但还是谢谢 :) - Yevgeny Simkin
这个回答应该不应该被点踩,因为它很好地回答了原问题。 - invapid
5
这个问题与nodejs有关,所以我会让其他人知道,node没有DomParser,这是浏览器的事情。 - Ethan Davis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接