Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用SAXON Xpath引擎_Java_Xpath_Saxon - Fatal编程技术网

在Java中使用SAXON Xpath引擎

在Java中使用SAXON Xpath引擎,java,xpath,saxon,Java,Xpath,Saxon,这是我的密码: public static void main(String[] args) { // System.setProperty( // "javax.xml.xpath.XPathFactory", // "net.sf.saxon.xpath.XPathFactoryImpl"); String xml="<root><a>#BBB#</a><a>#CCC#</a><b>

这是我的密码:

public static void main(String[] args) {

    // System.setProperty(
    // "javax.xml.xpath.XPathFactory", 
    // "net.sf.saxon.xpath.XPathFactoryImpl");

    String xml="<root><a>#BBB#</a><a>#CCC#</a><b><a>#DDD#</a></b></root>";
    try{
        JDocument dom = new JDocument(xml);

        XPathFactory factory = net.sf.saxon.xpath.XPathFactoryImpl.newInstance();
        XPath xpath = factory.newXPath();
        XPathExpression expr = xpath.compile("//a[matches(.,'#...#')]");

        Object result = expr.evaluate(dom, XPathConstants.NODESET);
        NodeList nodes = (NodeList) result;
        Nodes sharped = new Nodes(nodes);

        for (Node n:sharped){
            System.out.println(n.toString());
        }
    }
    catch(Exception e){
        e.printStackTrace();
    }

}
这意味着当我通过
net.sf.saxon.xpath.xpathfactorympl
创建工厂时,Java正在使用
org.apache.xpath.compiler.XPathParser

(实际上我只需要在我的XPath中放一些<代码>匹配<代码>…所以如果任何不涉及撒克逊人的解决方案都是已知的,请考虑我的需求)。< /P> 我做错了什么?

来自撒克逊的例子:

System.setProperty("javax.xml.xpath.XPathFactory:"+NamespaceConstant.OBJECT_MODEL_SAXON, "net.sf.saxon.xpath.XPathFactoryImpl");
XPathFactory xpf = XPathFactory.newInstance(NamespaceConstant.OBJECT_MODEL_SAXON);

工作正常。

如果您对jar文件感到困惑,您需要将saxon core和saxon dome添加到依赖项中以使其正常工作,否则您将得到一个“”无法找到类com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl节点的对象模型实现“Exception我该如何做相反的事情,也就是强制它在JVM中使用默认的XPathFactory(而不是Saxon)?不,James,因为我们想在这里使用XPath 2.0函数,如‘matches’。无论如何,这种解决方法在我的情况下不起作用,没有错误或警告,但在计算任何函数后都是空值。。注意:我使用docFactory.setNamespaceAware(false);
System.setProperty("javax.xml.xpath.XPathFactory:"+NamespaceConstant.OBJECT_MODEL_SAXON, "net.sf.saxon.xpath.XPathFactoryImpl");
XPathFactory xpf = XPathFactory.newInstance(NamespaceConstant.OBJECT_MODEL_SAXON);