Arrays 按顺序将XML解析为数组
我有一个XML文件,如下所示:Arrays 按顺序将XML解析为数组,arrays,node.js,xml,xml-parsing,node-expat,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 .../> 即,按顺序将所有A、B和C标记处理到同一数组中 我正在使用xml2json,它
<Item prop="foo">
<A key="1">
<B key="2">
<A key="3">
<C key="4">
<A key="5">
<A key="6">
</Item>
<Item .../>
<Item .../>
即,按顺序将所有A
、B
和C
标记处理到同一数组中
我正在使用xml2json
,它使用node expat
解析文件。使用node expat
或任何现有的npm
软件包是否可以实现这一点?我问这个问题的原因是,如果可能的话,我不想用编译语言编写自己的解析器
谢谢节点
A
、B
、C
的数量是否小且已知
如果是这样的话,你可以试试下面的方法
编辑: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))
这看起来很好,但我得到了以下警告:
(节点:3186)警告:N-API是一个实验性功能,可能随时更改。
。这个产品准备好了吗?另一个问题:是否可以添加由a | B | C
匹配的标记作为对象的属性?也就是说,每个项目都有类似{“key”:“4”,“tag”:“C”}
。@felamaslen请使用2.x.x版。版本3正在使用最新的N-API,这仍然是实验特性。我误解了你的问题。它应该更新为如下列表:['A | B | C',{key:'@key',tag:'name()}]
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"
}
]