【问题标题】:Parsing an XML file with multiple <?xml> tags using Node.js/Express/xml2js使用 Node.js/Express/xml2js 解析具有多个 <?xml> 标记的 XML 文件
【发布时间】:2019-11-21 20:02:36
【问题描述】:

我的问题如下:

我正在使用express.js 下载一个xml 文件,然后解析该文件。现在它看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE item   [ ]>
<item lang="EN" >
 <country>US</country>
 <doc-number>123123123</doc-number>
 <kind>A1</kind>
 <date>20191017</date>
</item>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE item  [ ]>
<item lang="EN" >
 <country>US</country>
 <doc-number>0938409384</doc-number>
 <kind>A2</kind>
 <date>20191018</date>
</item>

我正在使用xml2js 库,但无法获取整个文档。我的代码看起来像这样

parseString(xml, function (err, result) {
 console.log(obj);
})

XML 仅输出仅输出 xml 的第一段。我该如何解析这个,以便我可以得到&lt;item&gt;s 的数组?

我的第一个想法是将文档作为字符串循环并根据&lt;?xml version="1.0" encoding="UTF-8"?&gt; 拆分它并以这种方式解析数据。

谢谢!

【问题讨论】:

    标签: json xml xml-parsing xml2js


    【解决方案1】:

    我认为单个 xml 文档不能有多个 xml 声明。此外,根元素必须始终存在。

    因此,您提供的xml文档原则上是2个独立的xml文档。大多数解析器或 API 可能会拒绝它,因为它的格式不正确。

    您是否可以控制文档的生成方式?如果是,则应确保存在单个 xml 声明和单个根元素。类似于:

    <?xml version=“1.0” encoding=“utf-8”>
    <items>
      <item>…</item>
      <item>…</item>
    </items>
    

    如果您对生成没有任何控制权,您可能应该将其拆分并单独解析文档,或者将它们连接起来并生成与上述类似的文档。

    【讨论】:

    • 我最终将其拆分为“
    • 请注意,您已经创建了一个漏洞:知道您的应用程序正在这样做的人可以通过提交在 cmets 或 CDATA 部分中包含(准)XML 声明的文档来破坏它。
    • @MichaelKay 谢谢!我的应用程序正在 ping 一个 url 以下载包含这些 xml 文件的 zip。网址是安全的,我还需要担心吗?
    • 抱歉,我无法根据几段信息进行风险分析。
    猜你喜欢
    • 1970-01-01
    • 2019-03-15
    • 2014-08-30
    • 2012-06-09
    • 1970-01-01
    • 2023-01-23
    • 2013-11-13
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多