node.js 使用 xml2js 将 xml 转换为 json
node.js transform xml into json with xml2js
我正在使用 node.js 包 xml2js 将 xml 转换为 json。
文档在这里:https://www.npmjs.com/package/xml2js
我的问题是那些 xml 的属性没有正确转换。
包含多个事件的示例 XML
<events><event id="E0-001-098932239-8"></event><event id="E0-001-105389601-2"></event><event id="E0-001-104342965-3"></event><event id="E0-001-104830349-3"></event><event id="E0-001-105374979-6"></event><event id="E0-001-105389620-7"></event><event id="E0-001-104247759-2"></event><event id="E0-001-104342949-5">
结果来自 JSON.stringify(result.search.events)
事件标签在生成的事件中只有一次 JSON - 我的期望是它应该有多个标签事件。所以我假设转换过程出错了。我为解析器尝试了多个选项,如 ignoreAttrs、explicitArray 或 explicitChildren,但没有成功。
[{
"event": [{
"$": {
"id": "E0-001-098932239-8"
},
]
}, {
"$": {
"id": "E0-001-105389601-2"
},
}, {
"$": {
"id": "E0-001-104342965-3"
},
}, {
"$": {
"id": "E0-001-104830349-3"
},
访问 JSON 个元素
正确转换后,我希望通过 event[1].$.id
简单地访问 JSON 元素
但所有尝试都不成功:
- events.event --> 未定义
- events.event.$ --> 未定义
- events.$ --> 未定义
我现在的问题是:如何正确地将 xml 转换为 JSON 并正确访问元素?
Javascript是从0开始的,你应该得到events[0].event[0].$.id
此外,您可以尝试使用另一个包 (camaro) 来简单轻松地更改所需的结果。
示例:
const xml = '<events><event id="E0-001-098932239-8"></event><event id="E0-001-105389601-2"></event><event id="E0-001-104342965-3"></event><event id="E0-001-104830349-3"></event><event id="E0-001-105374979-6"></event><event id="E0-001-105389620-7"></event><event id="E0-001-104247759-2"></event><event id="E0-001-104342949-5"></event></events>'
const temp = {
events: ['/events/event', {
id: '@id'
}]
}
const transform = require('camaro')
const results = transform(xml, temp)
console.log(JSON.stringify(results, null, 2))
结果
{
"events": [
{
"id": "E0-001-098932239-8"
},
{
"id": "E0-001-105389601-2"
},
{
"id": "E0-001-104342965-3"
},
{
"id": "E0-001-104830349-3"
},
{
"id": "E0-001-105374979-6"
},
{
"id": "E0-001-105389620-7"
},
{
"id": "E0-001-104247759-2"
},
{
"id": "E0-001-104342949-5"
}
]
}
我正在使用 node.js 包 xml2js 将 xml 转换为 json。 文档在这里:https://www.npmjs.com/package/xml2js
我的问题是那些 xml 的属性没有正确转换。
包含多个事件的示例 XML
<events><event id="E0-001-098932239-8"></event><event id="E0-001-105389601-2"></event><event id="E0-001-104342965-3"></event><event id="E0-001-104830349-3"></event><event id="E0-001-105374979-6"></event><event id="E0-001-105389620-7"></event><event id="E0-001-104247759-2"></event><event id="E0-001-104342949-5">
结果来自 JSON.stringify(result.search.events)
事件标签在生成的事件中只有一次 JSON - 我的期望是它应该有多个标签事件。所以我假设转换过程出错了。我为解析器尝试了多个选项,如 ignoreAttrs、explicitArray 或 explicitChildren,但没有成功。
[{
"event": [{
"$": {
"id": "E0-001-098932239-8"
},
]
}, {
"$": {
"id": "E0-001-105389601-2"
},
}, {
"$": {
"id": "E0-001-104342965-3"
},
}, {
"$": {
"id": "E0-001-104830349-3"
},
访问 JSON 个元素
正确转换后,我希望通过 event[1].$.id
简单地访问 JSON 元素但所有尝试都不成功:
- events.event --> 未定义
- events.event.$ --> 未定义
- events.$ --> 未定义
我现在的问题是:如何正确地将 xml 转换为 JSON 并正确访问元素?
Javascript是从0开始的,你应该得到events[0].event[0].$.id
此外,您可以尝试使用另一个包 (camaro) 来简单轻松地更改所需的结果。
示例:
const xml = '<events><event id="E0-001-098932239-8"></event><event id="E0-001-105389601-2"></event><event id="E0-001-104342965-3"></event><event id="E0-001-104830349-3"></event><event id="E0-001-105374979-6"></event><event id="E0-001-105389620-7"></event><event id="E0-001-104247759-2"></event><event id="E0-001-104342949-5"></event></events>'
const temp = {
events: ['/events/event', {
id: '@id'
}]
}
const transform = require('camaro')
const results = transform(xml, temp)
console.log(JSON.stringify(results, null, 2))
结果
{
"events": [
{
"id": "E0-001-098932239-8"
},
{
"id": "E0-001-105389601-2"
},
{
"id": "E0-001-104342965-3"
},
{
"id": "E0-001-104830349-3"
},
{
"id": "E0-001-105374979-6"
},
{
"id": "E0-001-105389620-7"
},
{
"id": "E0-001-104247759-2"
},
{
"id": "E0-001-104342949-5"
}
]
}