嘿,我正在尝试在 node.js 应用程序中将 javascript 对象解析为 xml 字符串。我正在使用 npm 包
json2xml
像这样
json2xml(jsonObject, { header: true });
我的问题是,当有一个数组对象时,它会像这样解析它:
root: {
foo: [
{
bar: 'a',
},
{
bar: 'b',
},
],
};
<root>
<foo>
<bar>a</bar>
<bar>a</bar>
</foo>
而不是这样:
<root>
<foo>
<bar>a</bar>
</foo>
<foo>
<bar>b</bar>
</foo>
</root>
如我所愿。您有任何建议或任何其他我可以用来解决此问题的库吗?
我尝试了其他几个库:
jstoxml
、@javadev/xmltojson
、fast-xml-parser
,但都没有解决问题。我正在考虑编写自己的 jsToXml 解析器 xD
该对象应该这样组成:
{root: [{foo: {bar: "a"}}, {foo: {bar: "b"}}]}
好吧,假设我有一个像这样更复杂的对象:
{
root: {
method: "ping",
success: 1,
error_code: 0,
error_text: null,
params: {
foo: 11,
bar: [
{
id: 62278639526,
success: 1,
error_code: 0
},
{
id: 96176048010,
success: 1,
error_code: 0
}
]
},
response_id: "b33ba904",
time: 1681373894,
}
}
我还没有找到如何将js对象转换为xml的方法:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<method>ping</method>
<success>1</success>
<error_code>0</error_code>
<error_text />
<params>
<foo>11</foo>
<bar>
<id>62278639526</id>
<success>1</success>
<error_code>0</error_code>
</bar>
<bar>
<id>96176048010</id>
<success>1</success>
<error_code>0</error_code>
</bar>
</params>
<response_id>b33ba904</response_id>
<time>1681373894</time>
</root>
相反,我总是得到这个:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<method>ping</method>
<success>1</success>
<error_code>0</error_code>
<error_text />
<params>
<foo>11</foo>
<bar>
<id>62278639526</id>
<success>1</success>
<error_code>0</error_code>
<id>96176048010</id>
<success>1</success>
<error_code>0</error_code>
</bar>
</params>
<response_id>b33ba904</response_id>
<time>1681373894</time>
</root>
完全不是一回事,那我就这个:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<method>ping</method>
<success>1</success>
<error_code>0</error_code>
<error_text />
<params>
<foo>11</foo>
<bar>
<bar>
<id>62278639526</id>
<success>1</success>
<error_code>0</error_code>
</bar>
<bar>
<id>96176048010</id>
<success>1</success>
<error_code>0</error_code>
</bar>
</bar>
</params>
<response_id>b33ba904</response_id>
<time>1681373894</time>
</root>
所以我不确定这个库是否可以实现我想要的。我只是想确定是否有任何解决方案。如果没有也没关系,我可以找到其他方法。
不可能根据需要转换你的更复杂的示例,除非你在'params'中添加一个键,但这不是同一件事:
{
"root":{
"method":"ping",
"success":1,
"error_code":0,
"error_text":null,
"params":{
"foo":11,
"bar":[
{
"bar":{
"id":62278639526,
"success":1,
"error_code":0
}
},
{
"bar":{
"id":96176048010,
"success":1,
"error_code":0
}
}
]
},
"response_id":"b33ba904",
"time":1681373894
}
}
我需要在 XMLBuilder 中将 oneListGroup 作为 true 传递
const builder = new XMLBuilder({
format: true,
oneListGroup: true
});