Node.js - Разбор XML - PullRequest
       12

Node.js - Разбор XML

0 голосов
/ 23 ноября 2018

До сих пор я использовал много xml-анализаторов, но ни один из них не помогает мне достичь моей цели.Список используемых мной синтаксических анализаторов: xml-body-parser, xml2js, libxmljs и xamel.

. Я хочу выполнить следующие действия:

  • Анализировать 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);

1 Ответ

0 голосов
/ 26 ноября 2018

Этот код отлично работает для меня, в этом коде выполняются следующие действия:

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