提问人:Jakub Vala 提问时间:4/13/2023 更新时间:11/13/2023 访问量:186
将js对象中的数组对象解析为xml不起作用
Parsing array objects in js objects to xml not working
问:
嘿,我正在尝试将javascript对象解析为node.js应用程序中的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解析器xDjstoxml
@javadev/xmltojson
fast-xml-parser
答:
2赞
Pippo
4/13/2023
#1
对象应按如下方式组成:
{root: [{foo: {bar: "a"}}, {foo: {bar: "b"}}]}
0赞
Jakub Vala
4/13/2023
#2
好的,假设我有一个更复杂的对象,如下所示:
{
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>
0赞
Pippo
4/13/2023
#3
除非您在“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
}
}
0赞
Jakub Vala
4/13/2023
#4
确切地说,这不是一回事,那么我就有这个:
<?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>
所以我不确定,我想要的东西是否可以通过这个库实现。我只是想确定是否有任何解决方案。如果没有,没关系,我可以找到其他方法。
0赞
lesimoes
11/13/2023
#5
我需要在 XMLBuilder 中将 oneListGroup 作为 true 传递
const builder = new XMLBuilder({
format: true,
oneListGroup: true
});
评论