首页 > 解决方案 > 使用 Node.js/Express/xml2js解析具有多个标签的 XML 文件

问题描述

我的问题如下:

我正在使用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。我怎样才能解析这个所以我可以得到一个<item>s数组?

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

谢谢!

标签: jsonxmlxml-parsingxml2js

解决方案


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

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

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

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

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


推荐阅读