在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);