我有一个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 }
]
即。按顺序处理所有A
,B
和C
标记 并处理相同数组。
我正在使用xml2json
,它使用node-expat
来解析文件。是否可以使用node-expat
或任何现有的npm
套餐?我问的原因是因为如果可能的话,我不想用编译语言编写自己的解析器。
由于
答案 0 :(得分:3)
节点A
,B
,C
的数量是否较小且已知?
如果有,您可以尝试下面的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"
}
]