ich saxon9-7-0-4source.zip bauen und versuchen, die xPath .//item[@name='entry']//property[matches(@value,'test[0-9]{1,2}$')]/..
bei einem dom4j Dokument auszuführen auf den folgenden XML-basiert:Saxon kann nicht kompilieren xPath
<root>
<item name="abc">
<iitem>
<property value="test"/>
</iitem>
</item>
<item name="entry">
<iitem>
<property value="test"/>
</iitem>
<iitem>
<iiitem>
<property value="test12"/>
</iiitem>
</iitem>
<iitem>
<property value="123"/>
</iitem>
</item>
</root>
Die xPath tut, was ich exspect ich es testen online unter http://www.qutoric.com/xslt/analyser/xpathtool.html
Aber wenn ich das gleiche in meinem Java-Code versuchen
Processor proc = new Processor(false);
proc.getUnderlyingConfiguration().registerExternalObjectModel(new DOM4JObjectModel());
DocumentBuilder db = proc.newDocumentBuilder();
XdmNode xdmDoc = db.wrap(doc4j);
XPathCompiler xpath = proc.newXPathCompiler();
String path=".//item[@name='entry']//property[matches(@value,'test[0-9]{1,2}$')]/..";
XPathExecutable viewPath = xpath.compile(path);
ich einen unerwarteten Fehler Exception in thread "main" erhalten
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Cannot instantiate the type SystemFunctionCall
at net.sf.saxon.functions.SystemFunction.makeFunctionCall(SystemFunction.java:94)
at net.sf.saxon.functions.RegexFunction.makeFunctionCall(RegexFunction.java:69)
at net.sf.saxon.functions.RegexFunctionSansFlags.makeFunctionCall(RegexFunctionSansFlags.java:49)
at net.sf.saxon.functions.SystemFunctionLibrary.bind(SystemFunctionLibrary.java:91)
at net.sf.saxon.functions.FunctionLibraryList.bind(FunctionLibraryList.java:105)
at net.sf.saxon.expr.parser.XPathParser.parseFunctionCall(XPathParser.java:3015)
at net.sf.saxon.expr.parser.XPathParser.parseBasicStep(XPathParser.java:2005)
at net.sf.saxon.expr.parser.XPathParser.parseStepExpression(XPathParser.java:1890)
at net.sf.saxon.expr.parser.XPathParser.parseRelativePath(XPathParser.java:1815)
at net.sf.saxon.expr.parser.XPathParser.parsePathExpression(XPathParser.java:1777)
at net.sf.saxon.expr.parser.XPathParser.parseSimpleMappingExpression(XPathParser.java:1791)
at net.sf.saxon.expr.parser.XPathParser.parseUnaryExpression(XPathParser.java:1666)
at net.sf.saxon.expr.parser.XPathParser.parseExprSingle(XPathParser.java:653)
at net.sf.saxon.expr.parser.XPathParser.parseExpression(XPathParser.java:592)
at net.sf.saxon.expr.parser.XPathParser.parsePredicate(XPathParser.java:1958)
at net.sf.saxon.expr.parser.XPathParser.parseStepExpression(XPathParser.java:1900)
at net.sf.saxon.expr.parser.XPathParser.parseRelativePath(XPathParser.java:1820)
at net.sf.saxon.expr.parser.XPathParser.parsePathExpression(XPathParser.java:1777)
at net.sf.saxon.expr.parser.XPathParser.parseSimpleMappingExpression(XPathParser.java:1791)
at net.sf.saxon.expr.parser.XPathParser.parseUnaryExpression(XPathParser.java:1666)
at net.sf.saxon.expr.parser.XPathParser.parseExprSingle(XPathParser.java:653)
at net.sf.saxon.expr.parser.XPathParser.parseExpression(XPathParser.java:592)
at net.sf.saxon.expr.parser.XPathParser.parse(XPathParser.java:464)
at net.sf.saxon.expr.parser.ExpressionTool.make(ExpressionTool.java:98)
at net.sf.saxon.sxpath.XPathEvaluator.createExpression(XPathEvaluator.java:144)
at net.sf.saxon.s9api.XPathCompiler.internalCompile(XPathCompiler.java:506)
at net.sf.saxon.s9api.XPathCompiler.compile(XPathCompiler.java:481)
at xslt.XSLT.main(XSLT.java:35)
Dieser Fehler tritt auf, wenn ich versuche, die xPath über XPathExecutable viewPath = xpath.compile(path);
zu kompilieren.
GIven, dass Sie scheinen, eine sächsische Version selbst vom Quellcode zu bauen, und die Fehlermeldung gegeben ("kann nicht instanziieren ..."), vermute ich ein Build-Problem. Wahrscheinlich gibt es eine Klasse, die net.sf.saxon.expr.SystemFunctionCall benötigt, die Sie aus dem Build herausgelassen haben. Das Ausführen mit Class Loader-Tracing kann bei der Diagnose helfen. –
Ich habe den entsprechenden Code-Snippet in einer Standard-Java-Anwendung ausgeführt und den Stack-Trace erhalten, den Sie in meinem Bearbeitungsposten finden. – StellaMaris