You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中JS对象转XML时数组解析不符合预期的解决办法

解决数组转XML时生成重复节点的问题

推荐使用xmlbuilder2库

这个库对XML结构的控制灵活性很高,完全能满足你生成多个<foo>节点的需求。

首先安装依赖:

npm install xmlbuilder2

然后用以下代码实现转换:

const { create } = require('xmlbuilder2');

const jsonObject = {
  root: {
    foo: [
      { bar: 'a' },
      { bar: 'b' }
    ]
  }
};

// 构建XML
const xml = create({ version: '1.0' })
  .ele('root')
  .ele(jsonObject.root.foo.map(item => ({ foo: item }))) // 为数组每个元素生成独立的foo节点
  .end({ prettyPrint: true });

console.log(xml);

执行后会输出你预期的XML:

<root>
  <foo>
    <bar>a</bar>
  </foo>
  <foo>
    <bar>b</bar>
  </foo>
</root>

手动实现简易转换器的思路(如需自定义)

如果还是想自己写,可以基于递归遍历对象的逻辑:

  • 遍历对象的键值对,遇到值为数组时,循环数组中的每个元素,为每个元素生成对应名称的节点
  • 非数组值则直接生成子节点
  • 处理嵌套结构时递归调用转换逻辑

示例核心逻辑片段:

function jsonToXml(obj, parentNode) {
  for (const [key, value] of Object.entries(obj)) {
    if (Array.isArray(value)) {
      // 数组元素逐个生成同名节点
      value.forEach(item => {
        const childNode = parentNode.ele(key);
        jsonToXml(item, childNode);
      });
    } else if (typeof value === 'object' && value !== null) {
      const childNode = parentNode.ele(key);
      jsonToXml(value, childNode);
    } else {
      parentNode.ele(key).txt(value);
    }
  }
}

可以基于这个逻辑结合xmlbuilder2或原生字符串拼接来完成完整转换器。

内容的提问来源于stack exchange,提问作者Jakub Vala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 08:47:20