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 5c64093..73b41e9 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 @@ -18,6 +18,10 @@ import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpression; +import javax.xml.xpath.XPathFactory; import java.io.ByteArrayOutputStream; import java.io.OutputStreamWriter; import java.io.StringReader; @@ -61,6 +65,13 @@ public class Xalan implements XmlEngine{ return nodeType == Node.CDATA_SECTION_NODE || nodeType == Node.TEXT_NODE; } + private boolean isAttributeNode(Node n) { + if (n == null) + return false; + short nodeType = n.getNodeType(); + return nodeType == Node.CDATA_SECTION_NODE || nodeType == Node.ATTRIBUTE_NODE; + } + @Override public String processXSLT(XMLMultipleFilesData[] data, String transform) throws Exception { throw new UnsupportedOperationException("Xalan does not support multiple files XSLT processing"); @@ -101,7 +112,10 @@ public class Xalan implements XmlEngine{ for (Node nn = n.getNextSibling(); isTextNode(nn); nn = nn.getNextSibling()) { resultString.append(nn.getNodeValue()); } - } else { + } else if (isAttributeNode(n)) { + resultString.append(n.getNodeValue()); + } + else { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); serializer.transform(new DOMSource(n), new StreamResult(new OutputStreamWriter(outputStream))); resultString.append(outputStream);