Я использую следующий метод для преобразования узла xml в строку (обычно встречается в Интернете):
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. Проблема в том, что после преобразования в String элемент root в 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 на узлы (каждый узел является одним элементом), затем применяется некоторая бизнес-логика c (некоторые узлы удалены, некоторые сгруппированы по-разному), и в конце я должен вернуть ее обратно в строку.