1

到目前为止,我使用了许多 xml 解析器,但没有一个可以帮助我实现目标。我使用的解析器列表是xml-body-parserxml2js和。libxmljsxamel

我想做以下事情

  • 解析 XML 并将所有元素一一插入到数组中(显然使用循环)
  • 更新特定元素的属性,无论其深度如何
  • 保留解析前的 xml 节点序列
  • 响应更新的 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);
4

1 回答 1

2

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

  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);
    
于 2018-11-26T15:21:25.993 回答