到目前为止我已经使用了很多 xml 解析器,但是没有一个可以帮助我实现我的目标。我使用过的解析器列表是 xml-body-parser
、xml2js
、libxmljs
和 xamel
。
我想做以下事情
- 解析 XML 并将所有元素一一插入到数组中(显然使用了循环)
- 更新特定元素的属性,无论其深度如何
- 保留解析前 xml Node 的顺序
- 响应更新后的 xml
到目前为止,我只是完成了发送 xml,然后响应 xml,没有其他事情
到目前为止的代码是
var express = require("express"),
bodyParser = require('body-parser');
require("body-parser-xml")(bodyParser);
var xml2js = require('xml2js');
var builder = new xml2js.Builder;
var app = express();
var util = require('util');
app.use(bodyParser.xml({
xmlParseOptions: {
normalize: false,
normalizeTags: false,
explicitArray: false
}
}));
var XmlPosted;
app.post('/users', function (req, res, body) {
XmlPosted = req.body;
console.log();
res.send(builder.buildObject(req.body));
res.status(200).end();
});
app.listen(4000);
最佳答案
这段代码对我来说工作得很好,这段代码中完成的事情是
- 搜索特定的 xml 标签,然后设置新属性
- XML 已解析
已发送更新的响应
var DOMParser = new (require('xmldom')).DOMParser({ normalizeTags: { default: false } }); var express = require("express"), bodyParser = require('body-parser'); require("body-parser-xml")(bodyParser); var xml2js = require('xml2js'); var builder = new xml2js.Builder({ standalone: { default: false } }); var app = express(); //Options of body-parser-xml module app.use(bodyParser.xml({ xmlParseOptions: { normalize: false, // Trim whitespace inside text nodes normalizeTags: false, // Transform tags to lowercase explicitArray: false // Only put nodes in array if >1 } })); //Post Method app.post('/users', function (req, res, body) { //Parsing Request.Body var document = DOMParser.parseFromString( builder.buildObject(req.body).toString() ); //Getting a list of elements whose name is being given var node = document.getElementsByTagName("TextView"); //Changing Tag Name of Specific Elements for (var i = 0; i < node.length; i++) { node[i].tagName = "com.mycompany.projectname.TextView"; } //Responsing Updated Data res.send(document.toString()); }); app.listen(1000);
关于Node.js - Xml 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53447479/