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

如何将XML文件转换为NodeJS数组并保留原文件的顺序?

保留XML节点顺序转换为Node.js数组对象的方法

方法一:调整xml2js库的解析配置

xml2js本身支持保留子节点顺序,通过配置preserveChildrenOrder: true可让解析结果包含按顺序排列的子节点数组(存放在$$属性中),再通过自定义转换函数得到目标格式:

  1. 安装依赖:
npm install xml2js
  1. 示例代码:
const xml2js = require('xml2js');

// 待解析的XML内容
const xmlContent = `
<xml>
<a>content1</a>
<b>content2</b>
<a>content3</a>
<c>content4</c>
</xml>
`;

// 初始化解析器,配置保留节点顺序
const parser = new xml2js.Parser({
  preserveChildrenOrder: true, // 开启子节点顺序保留
  explicitArray: false,        // 非数组节点不强制转为数组
  ignoreAttrs: true            // 忽略XML属性,需要保留可删除此配置
});

parser.parseString(xmlContent, (err, parsedResult) => {
  if (err) throw err;

  // 将$$数组转换为目标格式
  const orderedResult = parsedResult.xml.$$.map(childNode => {
    const tagName = childNode['#name'];
    // 处理节点内容:文本节点取_属性,嵌套节点直接取节点对象
    const nodeContent = childNode._ || childNode;
    return { [tagName]: nodeContent };
  });

  console.log(JSON.stringify(orderedResult, null, 2));
});

执行后输出:

[
  { "a": "content1" },
  { "b": "content2" },
  { "a": "content3" },
  { "c": "content4" }
]

方法二:使用fast-xml-parser库

fast-xml-parser支持直接以数组形式保留节点顺序,配置更简洁:

  1. 安装依赖:
npm install fast-xml-parser
  1. 示例代码:
const { XMLParser } = require('fast-xml-parser');

const xmlContent = `
<xml>
<a>content1</a>
<b>content2</b>
<a>content3</a>
<c>content4</c>
</xml>
`;

// 初始化解析器,开启顺序保留
const parser = new XMLParser({
  ignoreAttributes: true,
  preserveOrder: true // 核心配置,保留节点顺序
});

const parsedResult = parser.parse(xmlContent);
// 提取根节点下的有序子节点并转换格式
const orderedResult = parsedResult[0].xml.map(item => {
  const [tagName, content] = Object.entries(item)[0];
  return { [tagName]: content };
});

console.log(JSON.stringify(orderedResult, null, 2));

执行后同样会输出符合需求的有序数组结构。

嵌套节点处理说明

如果XML包含嵌套节点(如<a><d>text</d></a>),需要对转换函数进行递归处理,确保嵌套节点的顺序也能保留。比如在xml2js的转换函数中,若发现节点存在$$属性,就递归调用转换逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:50:23