diff --git a/Backend-libXML/Parser.py b/Backend-libXML/Parser.py index 442484d..46b834f 100644 --- a/Backend-libXML/Parser.py +++ b/Backend-libXML/Parser.py @@ -79,9 +79,11 @@ def xpath(source: str, xpath: str) -> str: else: result_string = "" for e in result: - result_string += etree.tostring(e, pretty_print=True).decode() + "\n" - return result_string, "node" - + if isinstance(e, etree._Element): + result_string += etree.tostring(e, pretty_print=True).decode() + "\n" + else: + result_string += str(e) + "\n" + return result_string, "node" def xsd(source: str, xsd: str) -> bool: 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..56f15fa 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 @@ -61,6 +61,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 +108,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);