Node.js - Xml 解析

标签 node.js xml xml-parsing body-parser xml2js

到目前为止我已经使用了很多 xml 解析器,但是没有一个可以帮助我实现我的目标。我使用过的解析器列表是 xml-body-parserxml2jslibxmljsxamel

我想做以下事情

  • 解析 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);

最佳答案

这段代码对我来说工作得很好,这段代码中完成的事情是

  1. 搜索特定的 xml 标签,然后设置新属性
  2. XML 已解析
  3. 已发送更新的响应

    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/

相关文章:

java - 使用 Java 检索 XMl 数据

node.js - Node JS - Mongoose - 如何通过 ID 正确连接两个集合的结果

c# - Linq to XML 降序排序?

json - 使用 Caret 时是否应该在 package.json 中包含次要版本?

php - 在 PHP 中使用 DOMXPath 获取 XML 属性,忽略命名空间

sql-server - 用于 XML 路径分组的 TSQL

c++ - 这种精度损失发生在哪里以及如何防止它发生?

java - 根据内容查找xml节点

node.js - 如何在 lambda 函数中从 DynamoDb 获取最后插入的数据

api - CouchDB 作为 Restful API 层?