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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/15376312/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-02 13:50:30  来源:igfitidea点击:

What's the simplest way to parse an XML string in Node.js?

xmlnode.js

提问by Yevgeny Simkin

I'm looking around and not seeing an obvious way to parse XML in Node. I'm assuming that there's some relatively straight forward XML object that I can pass a String or url to, but I'm not finding anything like that in the spec. Do I need an external lib? and if so, which one would you guys recommend? I don't need xPath (though I wouldn't mind it) as long as I can walk the tree in an obvious way (test if nodeType == ElementNode and loop through children).

我环顾四周,没有看到在 Node.js 中解析 XML 的明显方法。我假设有一些相对直接的 XML 对象,我可以将字符串或 url 传递给它,但我在规范中没有找到类似的东西。我需要外部库吗?如果是这样,你们会推荐哪一个?我不需要 xPath(尽管我不介意),只要我能以明显的方式遍历树(测试 nodeType == ElementNode 并循环遍历子项)。

采纳答案by Jorge Israel Pe?a

There are a variety of XML modules listed herewhere perhaps you may find one that works best for you. A popular one that I'm aware of is sax-js. There are also libxml bindingsif you're already familiar with that library.

此处列出了多种 XML 模块,您或许可以从中找到最适合您的模块。我知道的一个流行的方法是sax-js。如果您已经熟悉该库,还可以使用libxml 绑定

回答by user568109

I suggest xml2js, a simple XML to JavaScript object converter. You can then iterate the resulting object. Code snippet from the page :

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

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

You can install it by using npm install xml2js

您可以使用安装它 npm install xml2js

回答by istos

If it isn't an absolute requirement that it has to be done server side, then on the client you could use XMLSerializerto parse into string, and DOMParserto parse into DOM.

如果它不是必须在服务器端完成的绝对要求,那么在客户端您可以使用XMLSerializer解析为字符串,并使用DOMParser解析为 DOM。

XMLSerializer Example (from DOM to string):

XMLSerializer 示例(从 DOM 到字符串):

var XMLS = new XMLSerializer();
var elem = document;
var xml_str = XMLS.serializeToString(elem);
console.log(xml_str);

DOMParser Example (from string to DOM):

DOMParser 示例(从字符串到 DOM):

var parser = new DOMParser();
var doc = parser.parseFromString(xml_str, "application/xml");
console.log(doc);

回答by Ilyas Assainov

If you're using Express along with body parser, the simplest way would be to use express-xml-bodyparser. It allows to parse XML for all routes or specific ones, depending on your scenario

如果您将 Express 与正文解析器一起使用,最简单的方法是使用express-xml-bodyparser。它允许为所有路由或特定路由解析 XML,具体取决于您的场景

All routes:

所有路线:

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

});

Specific routes:

具体路线:

app.post('/receive-xml', xmlparser({trim: false, explicitArray: false}), function(req, res, next) {
  // req.body contains parsed XML as JSON  
});