加载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
相关产品推荐
相关产品推荐

