【问题标题】:Node.js - Xml ParsingNode.js - Xml Parsing
【发布时间】:2019-04-26 02:42:31
【问题描述】:

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

我想做以下事情

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

【问题讨论】:

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


    【解决方案1】:

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

    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);
      

    【讨论】:

      猜你喜欢
      • 2015-05-12
      • 2012-01-11
      • 2012-07-16
      • 2014-05-20
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多