节点中的 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/userMapping:
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
)和另一种类型Item
。 Data
类型用于根 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 转换器模块未以正确的结构解析数据的主要内容,如果未能解决你的问题,请参考以下文章