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

加载XML到DOMSource时bean标签自动新增xmlns=""属性如何解决

问题原因

该异常触发的核心是DocumentBuilderFactory默认未启用XML命名空间感知能力。如果你的源XML根节点声明了默认命名空间(比如Spring Bean配置文件默认声明的xmlns="http://www.springframework.org/schema/beans"),解析阶段未开启命名空间支持时,DOM解析器会判定<bean>等子节点不属于根节点的默认命名空间,输出时会自动补充xmlns=""明确命名空间归属。

修复方案

仅需在初始化DocumentBuilderFactory时开启命名空间感知即可,修改后的代码如下:

import javax.xml.transform.OutputKeys;

String XML_PATH = "./some/path/in/project/someXML.xml";

DocumentBuilderFactory docBF = DocumentBuilderFactory.newInstance();
// 新增这行配置,开启命名空间感知
docBF.setNamespaceAware(true);
DocumentBuilder docBuilder = docBF.newDocumentBuilder();
Document doc = docBuilder.parse(XML_PATH);

TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
Transformer transformer = transformerFactory.newTransformer();
// 可选配置:配置输出缩进,避免格式化混乱
transformer.setOutputKey(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
DOMSource domSource = new DOMSource(doc);
StreamResult streamResult = new StreamResult(new File("./some/output/path/modifiedXml.xml"));
transformer.transform(domSource, streamResult);

修改后重新执行读写逻辑,<bean>标签自动新增xmlns=""的问题会消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:48:03