1
nodejsスクリプトでxml-streamを使用して非常に大きなXMLファイルを解析しようとしています。XMLを解析してxml-streamで子を収集する問題
XMLストリームがここで見つけることができます - https://github.com/assistunion/xml-stream
<?xml version="1.0"?>
<Products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" version="0.96" versionTimestamp="2012-02-07T03:00:00Z" fooKey="6402420af51e08">
<Product>
<id>296834</id>
<name>Thing</name>
<Photos>
<Photo>
<MediaURL>http://url.com/to/image/file</MediaURL>
</Photo>
<Photo>
<MediaURL>http://url.com/to/image/secondfile</MediaURL>
</Photo>
<Photo>
<MediaURL>http://url.com/to/image/thirdfile</MediaURL>
</Photo>
</Photos>
</Product>
</Products>
そして、私のnodejsコードは次のようになります...
var fs = require('fs')
, path = require('path')
, XmlStream = require('xml-stream')
;
// Create a file stream and pass it to XmlStream
var stream = fs.createReadStream(path.join(__dirname, 'samplekirby.xml'));
var xml = new XmlStream(stream);
xml.preserve('Product', true);
xml.collect('Photos');
xml.on('endElement: Product', function(item) {
console.log(item);
});
出力...
どう{ '$children':
[ { '$children': [Object], '$text': '296834', '$name': 'id' },
{ '$children': [Object], '$text': 'Thing', '$name': 'name' },
{ '$children': [Object], Photo: [Object], '$name': 'Photos' } ],
id: { '$children': [ '296834' ], '$text': '296834', '$name': 'id' },
name: { '$children': [ 'Thing' ], '$text': 'Thing', '$name': 'name' },
Photos:
{ '$children': [ [Object], [Object], [Object] ],
Photo: { '$children': [Object], MediaURL: [Object], '$name': 'Photo' },
'$name': 'Photos' },
'$name': 'Product' }
画像のURLは取得できますか?
さまざまな順序でさまざまなノードで.collect()と.preserve()を試しました。このlibの複雑な使用例はあまりないようです。私は非常に大きなXMLファイルを持っており、xml2jsはそれを処理できませんでした。何らかの方法で深さを増やす方法を見つけ出すことができたら、私はこのライブラリの選択肢に満足しています。
@Kirby更新。 –
これははるかに近いです!しかし、MediaUrlは1つしかありません。 – Kirby
@Kirby my bad。更新しました。 –