diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java index c67168a..829b62b 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java @@ -1,6 +1,7 @@ package com.r11.tools.xml; import org.apache.xpath.XPathAPI; +import org.apache.xpath.objects.XObject; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.traversal.NodeIterator; @@ -76,28 +77,33 @@ public class Xalan { serializer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); // Use the simple XPath API to select a nodeIterator. - NodeIterator nl = XPathAPI.selectNodeIterator(doc, transform); + try { + NodeIterator nl = XPathAPI.selectNodeIterator(doc, transform); - // Serialize the found nodes to result object. - StringBuilder result = new StringBuilder(); - Node n; - while ((n = nl.nextNode())!= null) { - StringBuilder sb; - if (isTextNode(n)) { - // DOM may have more than one node corresponding to a - // single XPath text node. Coalesce all contiguous text nodes - // at this level - for (Node nn = n.getNextSibling(); isTextNode(nn); nn = nn.getNextSibling()) { - result.append(nn.getNodeValue()); + // Serialize the found nodes to result object. + StringBuilder result = new StringBuilder(); + Node n; + while ((n = nl.nextNode())!= null) { + StringBuilder sb; + if (isTextNode(n)) { + // DOM may have more than one node corresponding to a + // single XPath text node. Coalesce all contiguous text nodes + // at this level + for (Node nn = n.getNextSibling(); isTextNode(nn); nn = nn.getNextSibling()) { + result.append(nn.getNodeValue()); + } + } else { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + serializer.transform(new DOMSource(n), new StreamResult(new OutputStreamWriter(outputStream))); + result.append(outputStream); } - } else { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - serializer.transform(new DOMSource(n), new StreamResult(new OutputStreamWriter(outputStream))); - result.append(outputStream); + result.append("\n"); } - result.append("\n"); + return result.toString(); + } catch (TransformerException e) { + return XPathAPI.eval(doc, transform).toString(); } - return result.toString(); + } /**