1
我正在以XML作爲輸入的節點中編寫REST服務,但是當我解析它時,只顯示第一級節點,嵌套的節點顯示爲對象。使用節點JS從嵌套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>
,輸出是
D:\Tryouts\myapp>node xmlParser.js
{ schools:
{ school:
{ name: 'Some Name',
city: 'Some City',
classes: [Object],
labs: [Object] } } }
undefined
基本上我在尋找的東西這將自動讀取嵌套的XML並顯示它。
我使用Chrome的插件REST與Method
爲POST
和Content-Type
爲application/xml
來調用這個服務http://localhost:3000/users
。
請求您的幫助來解決此問題。
一致認爲,這看起來像一個控制檯的默認問題,而不是FML解析的問題。 – Paul
parsedXml.classes仍然給我未定義,但是我能通過傳遞parsedXml得到完整的深度。現在下一部分是當我嘗試讀取/打印它失敗的單個元素時,因此我使用JSON.parse將sting解析爲JSON對象並獲取單個元素。它在JSON.parse方法中拋出錯誤。 – rtv
你如何嘗試訪問每個元素...你可以把這段代碼...你真正將xml字符串轉換爲json對象的位置? –