JavaScript操作XML需分环境:浏览器用DOMParser解析、XMLSerializer序列化,Node.js须用xml2js或fast-xml-parser;注意命名空间、编码、空格及DOCTYPE限制。

JavaScript 操作 XML 的核心在于解析和构建:浏览器环境用 DOMParser 和 XMLSerializer,Node.js 环境必须依赖第三方库(如 xml2js 或 fast-xml-parser),原生不支持。
浏览器中用 DOMParser 解析 XML 字符串
这是最标准、兼容性最好的方式,适用于 AJAX 获取的 XML 响应或本地 XML 文本。注意它返回的是 XML 文档对象(Document),不是 JSON,不能直接用点语法取值。
-
DOMParser只接受字符串,传入 Buffer 或 Blob 需先转为字符串 - 解析失败时不会抛错,但
parseFromString()返回的文档中document.documentElement会是null,需手动检查 - 命名空间敏感:含
xmlns的 XML,用getElementsByTagNameNS()才能正确匹配,getElementsByTagName()会失效
const xmlStr = ``; const parser = new DOMParser(); const doc = parser.parseFromString(xmlStr, "application/xml"); if (doc.documentElement === null) { console.error("XML 解析失败:", doc.querySelector("parsererror").textContent); } else { const item = doc.querySelector("item"); console.log(item.getAttribute("id")); // "1" console.log(item.textContent); // "A" } - A
用 XMLSerializer 反向生成 XML 字符串
当你修改了通过 DOMParser 得到的 XML 文档后,需要用它还原为字符串。这是唯一原生支持的序列化方式,不支持缩进或格式化,输出是紧凑单行。
- 只接受 XML 文档节点(
Document或Element),传入普通 JS 对象会报TypeError - 对
DocumentFragment也有效,但序列化结果不含 XML 声明(如) - 如果 XML 中有未转义的
&、等字符,XMLSerializer会自动转义,无需手动处理
const doc = parser.parseFromString("- A&B
", "application/xml");
const item = doc.querySelector("item");
item.textContent = "X&Y"; // 自动变成 "X&Y" 输出
const serializer = new XMLSerializer();
console.log(serializer.serializeToString(doc));
// 输出:- X&Y
Node.js 中必须用 xml2js 或 fast-xml-parser
Node.js 没有 DOMParser,所有 XML 处理都靠 npm 包。选型关键看需求:xml2js 默认转成嵌套 JS 对象(易用但慢、内存高),fast-xml-parser 更快更轻、支持验证和 CDATA,但默认不展开属性——得设 ignoreAttributes: false。
功能列表:底层程序与前台页面分离的效果,对页面的修改无需改动任何程序代码。完善的标签系统,支持自定义标签,公用标签,快捷标签,动态标签,静态标签等等,支持标签内的vbs语法,原则上运用这些标签可以制作出任何想要的页面效果。兼容原来的栏目系统,可以很方便的插入一个栏目或者一个栏目组到页面的任何位置。底层模版解析程序具有非常高的效率,稳定性和容错性,即使模版中有错误的标签也不会影响页面的显示。所有的标
立即学习“Java免费学习笔记(深入)”;
-
xml2js的parseString()是异步的,必须用Promise包一层或用async/await -
fast-xml-parser的parse()是同步的,但大文件可能阻塞主线程;若需流式解析,得换sax或libxmljs - 两者都不支持 XPath;需要查路径就得自己递归遍历,或引入
xpath库配合fast-xml-parser的toXML()回写
// fast-xml-parser 示例(推荐用于性能敏感场景)
const { XMLParser } = require("fast-xml-parser");
const parser = new XMLParser({
ignoreAttributes: false,
attributeNamePrefix: "@_",
});
const result = parser.parse(`- A
`);
console.log(result.item["@_id"]); // "1"
console.log(result.item["#text"]); // "A"
别踩这些坑:编码、空格、DOCTYPE 和 XSLT
XML 处理比 JSON 容易出隐性问题,尤其在跨环境时。
- XML 字符串必须声明编码(如
),否则中文可能乱码;DOMParser默认按 UTF-8 解析,但若响应头是ISO-8859-1,需先用TextDecoder转码 - XML 保留所有空白和换行,
textContent会包含缩进空格;要用innerText(仅 HTML)或手动trim(),或者用childNodes过滤Node.TEXT_NODE -
DOMParser不支持解析含或外部 DTD 的 XML(会静默失败);含的 XSLT 文件也不能直接解析
真正麻烦的从来不是“怎么解析”,而是“为什么解析出来是 null”“为什么属性读不到”“为什么中文变 ”。盯住 document.documentElement、检查命名空间、确认编码、打印原始字符串——这些比背 API 重要得多。








