Я пишу службу REST в узле, которая принимает XML как входную информацию, однако при ее анализе отображаются только узлы 1-го уровня, вложенные отображаются в виде объектов.Извлечь значения из вложенных XML с помощью Node JS
Я не могу жестко закодировать 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);
Мой вход XML для REST является
<?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>
И выход
D:\Tryouts\myapp>node xmlParser.js
{ schools:
{ school:
{ name: 'Some Name',
city: 'Some City',
classes: [Object],
labs: [Object] } } }
undefined
В основном я смотрю на то, что автоматически считывать вложенную XML и отобразить его.
Я использую Chrome плагин REST вызывать эту службу http://localhost:3000/users
с Method
как POST
и Content-Type
как application/xml
.
С вашей помощью для решения проблемы.
Согласовано, это похоже на проблему с настройками консоли, а не на проблему с разбором FML. – Paul
parsedXml.classes по-прежнему дает мне неопределенное, однако я смог получить полную глубину, просто передав parsedXml. Теперь следующая часть, когда я пытаюсь прочитать/распечатать отдельный элемент, он терпит неудачу, поэтому я использовал JSON.parse для анализа жала как объекта JSON и получения отдельных элементов. Это ошибка в методе JSON.parse. – rtv
Как вы пытаетесь получить доступ к каждому элементу ... можете ли вы поместить этот фрагмент кода ... где вы фактически преобразуете строку xml в объект json? –