2016-04-21 20 views
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を読んで、それを表示すると何かを見ていています。

私はPOSTapplication/xmlとしてContent-TypeとしてMethodでこのサービスhttp://localhost:3000/usersを呼び出すためにクロームRESTプラグインを使用しています。

これを解決するには、ヘルプをリクエストしてください。

答えて

2

良いといいUtilパッケージを使用したい場合があります。試してみてください:

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

希望します。

+0

FML解析の問題ではなく、これはコンソールのデフォルトの問題のようです。 – Paul

+0

parsedXml.classesはまだ私に未定義を与えますが、私はparsedXmlを渡すだけで完全な深みを得ることができました。次の部分は、個々の要素を読み書きしようとするときです。そのため、JSON.parseを使用してJSONオブジェクトとして解析し、個々の要素を取得しました。 JSON.parseメソッドでエラーがスローされています。 – rtv

+0

どのように各要素にアクセスしようとしますか...そのコードを置くことができます...実際にはxml文字列をjsonオブジェクトに変換していますか? –

関連する問題