【问题标题】:node.js transform xml into json with xml2jsnode.js 使用 xml2js 将 xml 转换为 json
【发布时间】:2018-02-08 18:47:21
【问题描述】:

我正在使用 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 json node.js xml xml2js


    【解决方案1】:

    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"
            }
        ]
    }
    

    【讨论】:

    • 完美答案。非常感谢!
    猜你喜欢
    • 2020-03-12
    • 2017-08-05
    • 2019-03-19
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 2019-02-20
    相关资源
    最近更新 更多