I have a need to extract a part of XML tree (everything under root
) and convert it to a string. (The result string will be later pasted inside XSL-FO
XSLT file.)
The above functionality is a part of Java 6 application. I use org.w3c.dom
and javax.xml.transform
. Still in the debugging process.
// ...
// Extract all child notes of root from foDoc
// and convert the result to String
Node root = foDoc.getElementsByTagNameNS("*","root").item(0);
NodeList body = root.getChildNodes();
String foResult;
try {
foResult = nodeListToString(body);
} catch (TransformerException e) {
logger.error(e);
foResult = "";
}
// ...
private static String nodeListToString(NodeList nodes) throws TransformerException {
StringBuilder result = new StringBuilder();
int len = nodes.getLength();
for(int i = 0; i < len; ++ i) {
result.append(nodeToString(nodes.item(i)));
}
return result.toString();
}
private static String nodeToString(Node node) throws TransformerException {
StringWriter buf = new StringWriter();
Transformer xform = TransformerFactory.newInstance().newTransformer();
xform.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
xform.transform(new DOMSource(node), new StreamResult(buf));
return(buf.toString());
}
My questions:
Assuming that there will always be exactly one
root
node, how reliable is my code in extracting everything under it?Am I missing any edge cases?
Anything just plain wrong?
Please disregard any exception handling inadequacies.
Edited on 10/06/2015
Since my originally posted code had a "just plain wrong" part, I've fixed it. There were no answers based on the old code.