diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java index f9f330b..076c385 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java @@ -39,6 +39,28 @@ public class Saxon implements XmlEngine{ throw new UnsupportedOperationException(); } + /** + * This method evaluates XQuery exporession on given xml + * @param data xml + * @param xquery expression + * @return + * @throws Exception + */ + @Override + public String executeXQuery(String data, String xquery) throws Exception { + Processor processor = new Processor(false); + + XQueryCompiler compiler = processor.newXQueryCompiler(); + + XQueryExecutable executable = compiler.compile(xquery); + + XQueryEvaluator evaluator = executable.load(); + evaluator.setSource(new StreamSource(new StringReader(data))); + + XdmValue result = evaluator.evaluate(); + return result.toString(); + } + /** * Process xpath and return either node or wrapped atomic value * @param data xml to be querried 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 51ad04f..97154ae 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 @@ -133,4 +133,9 @@ public class Xalan implements XmlEngine{ validator.validate(dataSource); return "XML file is valid"; } + + @Override + public String executeXQuery(String data, String xquery) throws Exception { + throw new UnsupportedOperationException("Xalan doesn't support XQuery evaluation"); + } } diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java index 5742073..73bd01a 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java @@ -7,6 +7,8 @@ public interface XmlEngine { String processXSLT(String data, String transform) throws Exception; String validate(String data, String xsd) throws Exception; + String executeXQuery(String data, String xquery) throws Exception; + public String getVersion(); }