Наилучшее решение, Андрей М, нуждается в конкретной реализации, которая может вызвать проблемы в будущем. Здесь тот же подход, но только с тем, что JDK дает вам для сериализации (это означает, что настроено для использования).
public static String innerXml(Node node) throws Exception
{
StringWriter writer = new StringWriter();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
NodeList childNodes = node.getFirstChild().getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
transformer.transform(new DOMSource(childNodes.item(i)), new StreamResult(writer));
}
return writer.toString();
}
Если вы обрабатываете документ , а не узел, вы должны углубиться на один уровень и использовать node.getFirstChild().getChildNodes();
Но, , чтобы сделать его более надежным, вы должны найти Первый элемент, а не просто принимать как должное, что есть только один узел. XML должен иметь один корневой элемент, но может содержать несколько узлов, включая комментарии, сущности и пробельные символы.
Node rootElement = docRootNode.getFirstChild();
while (rootElement != null && rootElement.getNodeType() != Node.ELEMENT_NODE)
rootElement = rootElement.getNextSibling();
if (rootElement == null)
throw new RuntimeException("No root element found in given document node.");
NodeList childNodes = rootElement.getChildNodes();
И если мне порекомендовать библиотеку для работы с ней, попробуйте JSoup, который в основном предназначен для HTML, но также работает с XML . Хотя я этого не проверял.
Document doc = Jsoup.parse(xml, "", Parser.xmlParser());
fileContents.put(Attributes.BODY, document.body().html());
// versus: document.body().outerHtml()