java - 将 XML 加载到 DOmSource 正在将 xmlns="" 添加到所有 bean 标记
问题描述
我正在尝试通过将 XML 文件加载到 Document 对象中并在那里进行操作来以编程方式编辑 XML 文件。但是,如果我将 XML 加载到 InputStream 中或将其写回文件,则程序上的这一部分有效,所有 bean 标记都xmlns=""
添加了属性。
所以如果在我之前有:
<bean id="discoverySpi" class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder" ref="ipFinder" />
</bean>
我退出:
<bean xmlns="" class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi" id="discoverySpi">
<property name="ipFinder" ref="ipFinder"/>
</bean>
这发生在所有 bean 标签天气或没有被编辑。我验证了简单地读取 XML 文件并使用以下代码将其写回而不对 Document 对象进行任何更改仍然会导致错误。
我假设当我创建 DOMSource 对象时会发生这种情况,但不知道如何阻止这种情况发生。
目前,当我尝试使用 XML 文件时,这些添加的属性会导致错误。
String XML_PATH = "./some/path/in/project/someXML.xml";
DocumentBuilderFactory docBF = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBF.newDocumentBuilder();
Document doc = docBuilder.parse(XML_PATH);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource domSource = new DOMSource(doc);
StreamResult streamResult = new StreamResult(new File("./some/output/path/modifiedXml.xml"));
transformer.transform(domSource, streamResult);
解决方案
首先,添加
docBF.setNamespaceAware(true);
其次,确保每当您以编程方式将元素添加到 DOM 时,您使用的是名称空间感知版本的方法,例如createElementNS()
.
考虑使用 XOM 或 JDOM2 等库而不是 DOM。当有更好的替代方案可用时,DOM 的流行从未停止让我感到惊讶。
推荐阅读
- python - 使用带有 Gensim 的西班牙预训练模型会导致引发 KeyError("word '%s' not in words" % word)
- apache-spark - 如何将 csv 转换为 RDD 并在 pyspark 中使用 RDD 进行一些检测?
- django - 带有 postgreSQL 的 Django 频道
- sockets - Node Js TCP客户端未循环接收数据
- php - 是否有一种聪明的方法在您的网站上打开节点 js 服务器,同时仍然使用 php
- python - 绘制由一个滑块控制的两个子图
- sqlite - 如何在查询 Android Studio 中执行此操作?
- javascript - 如何将 AJAX 帖子中的二进制内容转储到 python 中的文件?
- batch-file - 如何通过批处理脚本从文件中获取特定值?
- embedded - I2C 无法启动