我喜欢在xPath中使用正则表达式,所以我安装了Saxon9.6
然后我在C:\ Program Files\Java\jdk1.7.0_51\jre\lib下创建了一个jaxp.properties文件并添加以下行:
javax.xml.transform.TransformerFactory = net.sf.saxon.TransformerFactoryImpl javax.xml.xpath.XPathFactory","net.sf.saxon.xpath.XPathFactoryImpl
但是现在我找不到像这个页面上描述的那样的例子.
在Saxon的最新版本中,JAR文件不再包含将其作为JAXP XPath工厂提供程序广告的meta-inf服务文件.这是因为太多的应用程序遇到了问题:如果应用程序是经过编写和测试的,可以使用JDK附带的XPath 1.0引擎,那么如果你尝试使用Saxon的XPath 2.0引擎运行它,它很有可能会失败,这种情况的发生仅仅是撒克逊人在阶级路径上的结果.因此,如果您想使用Saxon作为XPath引擎,则现在必须明确请求,例如net.sf.saxon.xpath.XPathFactoryImpl直接实例化.
我的意思是呼唤new XPathFactoryImpl()而不是XPathFactoryImpl.newInstance()因为它是继承而来的XPathFactory.
但是,因为XPath 2.0类型系统比XPath 1.0更丰富,所以JAXP接口非常笨拙,我建议使用s9api接口.
小智 6
我像这样使用 Saxon-HE 9.8.0-5:
Processor processor = new Processor(false);
XdmNode xdm = processor.newDocumentBuilder().build(new StreamSource(new StringReader(xml)));
XdmValue result = processor.newXPathCompiler().evaluate(query, xdm);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < result.size(); i++) {
sb.append(result.itemAt(i).getStringValue());
if (i + 1 != result.size()) {
sb.append('\n');
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7952 次 |
| 最近记录: |