节点中的jstoxml转换器模块未正确解析数据结构

时间:2014-11-28 11:51:26

标签: javascript xml json node.js npm

我正在尝试使用jstoxml模块在我的Node js服务中将JSON对象转换为XML。我的输入结构是:

{
    "user": "505723c5750c1fa2177682ed",
    "uri": "http://localhost:3000/users/505723c5750c1fa2177682ed/items",
    "items": [
    {
        "uri": "http://localhost:3000/items/1"
    },
    {
        "uri": "http://localhost:3000/items/2"
    }
    ],
    "info": "blah."
}

我期待的结果是:

<user>505723c5750c1fa2177682ed</user>
<uri>http://localhost:3000/users/505723c5750c1fa2177682ed/items</uri>
    <items>
        <uri>http://localhost:3000/items/1</uri>
    </items>
    <items>
        <uri>http://localhost:3000/items/2</uri>
    </items>
<info>blah.</info>

我得到的结果是:

<user>505723c5750c1fa2177682ed</user>
<uri>http://localhost:3000/users/505723c5750c1fa2177682ed/items</uri>
    <items>
        <uri>http://localhost:3000/items/1</uri>
        <uri>http://localhost:3000/items/2</uri>
    </items>
<info>blah.</info>

如果有人遇到类似的问题,请帮助我。是否有任何其他npm节点包用于获得预期的结构?

由于

3 个答案:

答案 0 :(得分:1)

免责声明:我是Jsonix的作者,这是一个用于XML&lt; - &gt; JS转换的开源JavaScript库。 Jsonix可用于Node.js(参见here)。

Jsonix可以基于映射在XML和JSON之间(在两个方向上)进行转换。映射为您提供了在JSON和XML之间进行转换时的灵活性。这可能是你需要的。


我会让代码发言。这是JSON-&gt; XML转换的演示案例:

Mapping

var Mapping = {
    name : 'Mapping',
    typeInfos : [ {
        localName : 'Data',
        propertyInfos : [ {
            name : 'user'
        }, {
            name : 'uri'
        }, {
            name : 'items',
            collection : true,
            typeInfo : '.Item'
        }, {
            name : 'info'
        } ]
    }, {
        localName : 'Item',
        propertyInfos : [ {
            name : 'uri'
        } ]
    } ],
    elementInfos : [ {
        elementName : {
            localPart : 'data'
        },
        typeInfo : '.Data'
    } ]
};
module.exports.Mapping = Mapping;

这里我们有两种类型:根类型(我称之为Data)和另一种类型ItemData类型用于根XML元素data

好的,现在是marshalling code

    // Create Jsonix context
    var context = new Jsonix.Context([ Mapping ]);

    var data = {
        name : new Jsonix.XML.QName('data'),
        value : {
            "user" : "505723c5750c1fa2177682ed",
            "uri" : "http://localhost:3000/users/505723c5750c1fa2177682ed/items",
            "items" : [ {
                "uri" : "http://localhost:3000/items/1"
            }, {
                "uri" : "http://localhost:3000/items/2"
            } ],
            "info" : "blah."
        }
    };

    var marshaller = context.createMarshaller();

    console.log(marshaller.marshalString(data));

以下是您获得的XML:

<data>
    <user>505723c5750c1fa2177682ed</user>
    <uri>http://localhost:3000/users/505723c5750c1fa2177682ed/items</uri>
    <items>
        <uri>http://localhost:3000/items/1</uri>
    </items>
    <items>
        <uri>http://localhost:3000/items/2</uri>
    </items>
    <info>blah.</info>
</data>

链接:


如果您可以将XML与JSON匹配,请检查其他库,例如xml2js

答案 1 :(得分:0)

我的问题得到了解决方案。 Here你可以得到它。 this是一个在线演示。通过导出他们提供的代码,我们可以实现它,

答案 2 :(得分:0)

感谢您使用我的图书馆!我为延迟道歉。您可以使用以下结构实现该输出:

[
    {"user": "505723c5750c1fa2177682ed"},
    {"uri": "http://localhost:3000/users/505723c5750c1fa2177682ed/items"},
    [
        {"items": {"uri": "http://localhost:3000/items/1"}},
        {"items": {"uri": "http://localhost:3000/items/1"}}
    ],
    {"info": "blah."}
]

输出:

<user>505723c5750c1fa2177682ed</user>
<uri>http://localhost:3000/users/505723c5750c1fa2177682ed/items</uri>
<items>
    <uri>http://localhost:3000/items/1</uri>
</items>
<items>
    <uri>http://localhost:3000/items/1</uri>
</items>
<info>blah.</info>