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

Posted

技术标签:

【中文标题】节点中的 jstoxml 转换器模块未以正确的结构解析数据【英文标题】:jstoxml converter module in node not parsing data in correct structure 【发布时间】:2015-01-27 01:51:23 【问题描述】:

我正在尝试使用 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 节点包可以在预期的结构中获得它?

谢谢

【问题讨论】:

这是一个精确的 json 到 xml 的转换,为什么你希望它有所不同.. Naeem 感谢您的评论。我需要我预期结果格式的结果。有什么办法吗?或者我需要在 json 中进行哪些更改才能得到预期的结果?? Naeem.. 在utilities-online.info 中试试这个在线工具。这给了我预期的结果。 【参考方案1】:

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

[
    "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>

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

免责声明:我是Jsonix 的作者,这是一个用于 XMLJS 转换的开源 javascript 库。 Jsonix 可用于 Node.js(请参阅 here)。

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


我会让代码说话。这是您的 JSON->XML 转换的演示案例:

https://github.com/highsource/jsonix/tree/master/nodejs/demos/user

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>

链接:

Jsonix project on GitHub Jsonix documentation

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

【讨论】:

词典。伟大的工作.. 但对我来说运气不好.. :( 但我无法制作映射文件。我的 json 可以是动态的。有什么解决方案吗。 @Sreejith 目前没有 Jsonix。我将实施无映射解决方案,但这目前对您没有帮助。但是检查this answer,它列出了许多方法,也许你会找到符合你需求的东西。并尝试我提到的xml2js @Sreejith 将其发布为答案(可以这样做)。

以上是关于节点中的 jstoxml 转换器模块未以正确的结构解析数据的主要内容,如果未能解决你的问题,请参考以下文章

Redshift 连接未以正确方式关闭

Web scraper / CSV未以正确的格式保存

当属性名称包含特殊字符时,使用 xslt 转换 xml 结果后,输出未以 HTML 格式显示

正确转换相对于指定空间的节点?

IOS 11 相机标签未以本地电话语言显示

如果应用程序未以编程方式安装 firebase 动态链接,则重定向到 iOS App Store