2013-02-13 91 views
1

我对Node.js比较陌生。我试图将大小约为400MB的83个XML文件转换为JSON。Node.js将Xml转换为JSON以用于大型Xml文件的示例

每个文件包含这样的数据(除了每个元件具有大量的附加语句):

<case-file> 
    <serial-number>75563140</serial-number> 
    <registration-number>0000000</registration-number> 
    <transaction-date>20130101</transaction-date> 
    <case-file-header> 
    <filing-date>19981002</filing-date> 
    <status-code>686</status-code> 
    <status-date>20130101</status-date> 
    </case-file-header> 
    <case-file-statements> 
    <case-file-statement> 
     <type-code>D10000</type-code> 
     <text>"MUSIC"</text> 
    </case-file-statement> 
    <case-file-statement> 
     <type-code>GS0351</type-code> 
     <text>compact discs</text> 
    </case-file-statement> 
    </case-file-statements> 
    <case-file-event-statements> 
    <case-file-event-statement> 
     <code>PUBO</code> 
     <type>A</type> 
     <description-text>PUBLISHED FOR OPPOSITION</description-text> 
     <date>20130101</date> 
     <number>28</number> 
    </case-file-event-statement> 
    <case-file-event-statement> 
     <code>NPUB</code> 
     <type>O</type> 
     <description-text>NOTICE OF PUBLICATION</description-text> 
     <date>20121212</date> 
     <number>27</number> 
    </case-file-event-statement> 
    </case-file-event-statements> 

我已经尝试了许多不同的节点模块,包括萨克斯,节点的XML的,node-expat和xml2json。很显然,我需要从文件中传输数据并通过XML解析器管理它,然后将其转换为JSON。

我也尝试阅读大量的博客等尝试解释,虽然表面上,如何解析XML。

在Node universe中,我先尝试了sax,但我无法弄清楚如何以可以将其转换为JSON的格式提取数据。 xml2json不能在流上工作。 node-xml看起来令人鼓舞,但我无法弄清楚它如何以任何合理的方式解析块。 node-expat指向libexpat文档,这似乎需要一个博士学位。 Node elementree也一样,指向Python实现,但没有解释已经实现了什么或者如何使用它。

有人能指点我可以用来开始的例子吗?

+0

你可以使用节点模块jquery来解析xml(与浏览器端相同)。 – 2013-02-13 06:54:00

+0

解析XML不是问题。我用sax取得了成功。它很好地传输数据。问题是将其转换为Json。我找不到流Json解析器。我没有尝试节点jquery,因为它的自述文件说它不适用于Windows,而我正在开发Windows。我终于写了一个Json转换器。 – 2013-02-18 12:24:16

回答

0

我想现在你有一个工作过程,考虑你最后的答案。

无论如何,如果您已经使用SAX成功解析了传入数据,解决方案可能会简单地将数据放入您设计的对象中,并使用yourStream.write(JSON.stringify(yourObject)) 将其流出。

1

我怀疑这个问题在2-3年之后仍然有效,但如果有其他人绊倒了这个位置,我会说xml-stream对NPM看起来相当直接。

如果你是谁想要避免GYP但是我尝试添加使用sax提取孩子形成一个XML文件,一个一个非常简单的解决方案,这就是所谓的no-gyp-xml-stream,它可能不会有很多功能的Windows用户,但它确实很简单:https://www.npmjs.com/package/no-gyp-xml-stream