1
XMLを入力とするノードにRESTサービスを作成していますが、解析すると第1レベルのノードのみが表示され、ネストされたノードはオブジェクトとして表示されます。ノード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を読んで、それを表示すると何かを見ていています。
私はPOST
とapplication/xml
としてContent-Type
としてMethod
でこのサービスhttp://localhost:3000/users
を呼び出すためにクロームRESTプラグインを使用しています。
これを解決するには、ヘルプをリクエストしてください。
FML解析の問題ではなく、これはコンソールのデフォルトの問題のようです。 – Paul
parsedXml.classesはまだ私に未定義を与えますが、私はparsedXmlを渡すだけで完全な深みを得ることができました。次の部分は、個々の要素を読み書きしようとするときです。そのため、JSON.parseを使用してJSONオブジェクトとして解析し、個々の要素を取得しました。 JSON.parseメソッドでエラーがスローされています。 – rtv
どのように各要素にアクセスしようとしますか...そのコードを置くことができます...実際にはxml文字列をjsonオブジェクトに変換していますか? –