使用节点JS从嵌套的XML中提取值

使用节点JS从嵌套的XML中提取值,xml,node.js,rest,body-parser,Xml,Node.js,Rest,Body Parser,我正在节点中编写一个REST服务,它接受XML作为输入,但是当我解析它时,只显示第一级节点,嵌套的节点显示为对象 我无法硬编码要读取的XML元素,因为根据规范,有可选元素,所以它必须是动态的 我正在使用body parser xml来解析xml var express = require('express'), bodyParser = require('body-parser'); require('body-parser-xml')(bodyParser); //var xmlp

我正在节点中编写一个REST服务,它接受XML作为输入,但是当我解析它时,只显示第一级节点,嵌套的节点显示为对象

我无法硬编码要读取的XML元素,因为根据规范,有可选元素,所以它必须是动态的

我正在使用
body parser xml
来解析xml

var express = require('express'),
    bodyParser = require('body-parser');

require('body-parser-xml')(bodyParser);

//var xmlparser = require('express-xml-bodyparser');

var app = express();

app.use(bodyParser.xml({
  limit: '1MB',   // Reject payload bigger than 1 MB 
  xmlParseOptions: {
    normalize: true,     // Trim whitespace inside text nodes 
    normalizeTags: true, // Transform tags to lowercase 
    explicitArray: false, // Only put nodes in array if >1 
    preserveChildrenOrder: true
  }
}));

// app.use(xmlparser());

app.post('/users', function(req, res, body) {
  // Any request with an XML payload will be parsed 
  // and a JavaScript object produced on req.body 
  // corresponding to the request payload. 
  console.log(req.body);
  var parsedXml = req.body;
  console.log(parsedXml.classes);
  res.status(200).end();
});

var http = require('http');
http.createServer(app).listen(3000);
我对REST的XML输入是

<?xml version="1.0" encoding="UTF-8"?>
<Schools>
<School>
    <Name>Some Name</Name>
    <City>Some City</City>
    <Classes>
        <Class>
            <Name>Class 1</Name>
            <OnRoll>20</OnRoll>
            <Students>
                <Student>
                    <Name>Student 1</Name>
                    <Age>10</Age>
                </Student>
                <Student>
                    <Name>Student 2</Name>
                    <Age>11</Age>
                </Student>
            </Students>
        </Class>
        <Class>
            <Name>Class 2</Name>
            <OnRoll>30</OnRoll>
            <Students>
                <Student>
                    <Name>Student 21</Name>
                    <Age>12</Age>
                </Student>
                <Student>
                    <Name>Student 22</Name>
                    <Age>13</Age>
                </Student>
            </Students>
        </Class>
    </Classes>
    <Labs>
        <Lab>
            <Name>Science Lab 1</Name>
            <Subject>Physics</Subject>
        </Lab>
        <Lab>
            <Name>Science Lab 2</Name>
            <Subject>Chemistry</Subject>
        </Lab>
    </Labs>
    </School>
</Schools>
基本上,我看到的是能够自动读取嵌套XML并显示它的东西

我正在使用Chrome REST插件调用此服务
http://localhost:3000/users
使用
方法
作为
POST
内容类型
作为
application/xml


请求您的帮助以解决此问题。

您可能需要使用good and nice
Util
软件包。试试这个:

const util = require('util');
// Parse your xml file   
console.log(util.inspect(parsedXml.classes, { depth: null, showHidden: false }));

希望这有帮助。

同意,这看起来像是控制台默认值问题,而不是FML解析的问题。parsedXml.classes仍然给我未定义的,但是我通过传递parsedXml就可以获得完整的深度。现在,下一部分是当我尝试读取/打印单个元素时,它失败了,所以我使用JSON.parse将sting解析为JSON对象&获取单个元素。它在JSON.parse方法中抛出错误。您如何尝试访问每个元素。。。你能把那段代码。。。您实际上是在哪里将xml字符串转换为json对象的?
const util = require('util');
// Parse your xml file   
console.log(util.inspect(parsedXml.classes, { depth: null, showHidden: false }));