我使用以下方法将XML节点转换为String(通常在网络上找到):
String nodeToString(Node node) {
StringWriter sw = new StringWriter();
try {
Transformer t = TransformerFactory.newInstance().newTransformer();
t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
t.setOutputProperty(OutputKeys.INDENT, "yes");
t.transform(new DOMSource(node), new StreamResult(sw));
} catch (TransformerException te) {
throw ...
}
return sw.toString();
}
Node
转换为字符串后不是整个 XML 文档,而只是更大的 XML 的一部分。
问题在于转换为字符串后,Node
的根元素会添加一个 xmlns
,这会导致问题。
这是 nodeToString
返回的字符串:
<doc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<header>
...
</header>
<payload>
...
</payload>
</doc>
最糟糕的是,这种情况只发生在UAT环境中,而不是我的机器和测试环境上,我很难找到两个环境之间的区别。
有没有人遇到过这个问题并知道是什么原因引起的?
编辑:
原始文档如下:
<docs>
<doc>
<header>
...
</header>
<payload>
...
</payload>
</doc>
<doc>
<header>
...
</header>
<payload>
...
</payload>
</doc>
// more <doc>s
<docs>
这段代码使用XPath将文本拆分为节点(每个节点都是一个元素),然后应用一些业务逻辑(删除某些节点,以不同方式对其进行分组),最终需要将其转换回字符串格式。