按顺序将XML解析为数组

时间:2018-04-06 10:19:18

标签: arrays node.js xml xml-parsing node-expat

我有一个XML文件,如下所示:

<Item prop="foo">
  <A key="1">
  <B key="2">
  <A key="3">
  <C key="4">
  <A key="5">
  <A key="6">
</Item>
<Item .../>
<Item .../>

我想将此文件解析为Item s的数组,如下所示:

[
  {
    "prop": "foo",
    "list": [
      { "key": "1" },
      { "key": "2" },
      { "key": "3" },
      { "key": "4" },
      { "key": "5" },
      { "key": "6" }
    ]
  },
  { ...item }
  { ...item }
]

即。按顺序处理所有ABC标记 并处理相同数组

我正在使用xml2json,它使用node-expat来解析文件。是否可以使用node-expat或任何现有的npm套餐?我问的原因是因为如果可能的话,我不想用编译语言编写自己的解析器。

由于

1 个答案:

答案 0 :(得分:3)

节点ABC的数量是否较小且已知?

如果有,您可以尝试下面的camaro

编辑:xml必须有效,在上面的例子中,它没有正确关闭。

const transform = require('camaro')
const xml = `
<Item prop="foo">
  <A key="1"/>
  <B key="2"/>
  <A key="3"/>
  <C key="4"/>
  <A key="5"/>
  <A key="6"/>
</Item>
`

const { output } = transform(xml, {
    output: [
        '//Item',
        {
            prop: '@prop',
            list: ['A|B|C', { key: '@key' , tag: 'name()'}]
        }
    ]
})

console.log(JSON.stringify(output, null, 2))

输出

[
  {
    "list": [
      {
        "key": "1",
        "tag": "A"
      },
      {
        "key": "2",
        "tag": "B"
      },
      {
        "key": "3",
        "tag": "A"
      },
      {
        "key": "4",
        "tag": "C"
      },
      {
        "key": "5",
        "tag": "A"
      },
      {
        "key": "6",
        "tag": "A"
      }
    ],
    "prop": "foo"
  }
]