使用节点JS从嵌套的XML中提取值
我正在节点中编写一个REST服务,它接受XML作为输入,但是当我解析它时,只显示第一级节点,嵌套的节点显示为对象 我无法硬编码要读取的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
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 }));