我正在对我们的项目进行一些升级,并且由于我们过去的实施方式,我与Saxon陷入了很多混乱。
我们创建了一些用于评估xpath表达式的实用程序类,看起来我们可能使用了9.x.x系列之前的功能。我们在JUnit测试中利用实用程序类。我们希望从9.5进入9.6,但是会遇到一些编译问题。
我们编写了一个实用程序函数来评估XPath表达式
...
proc.getUnderlyingConfiguration()
.setSourceParserClass("com.boeing.cactus.xml.catalogs.CactusSchemaAwareXMLReader");
evaluator = new XPathEvaluator(proc.getUnderlyingConfiguration());
XPathExpression expr = evaluator.createExpression(expression);
List<?> list = expr.evaluate(new DOMSource(node));
return getStringFromXPathResult(list);
node
对象的类型为org.w3c.dom.Node
在Saxon 9.6中,expr.evaluate
不再需要DOMSource
,它需要一个XPathDynamicContext
,它需要Item
撒克逊接口的实现者。
我们在针对InputSource
评估XPath时遇到了类似的问题。在这种情况下,我们从StreamSource
中的javax.xml.transform.stream
开始InputSource object
。然后我们调用了一个非常相似的evaluate
实现:
List<?> list = expr.evaluate(XmlTransformer.getSource(source));
我真的很难弄清楚一个简单的简单步骤在哪里,或者如果我们的代码是如此扭曲,我需要重新审视我们的测试以及他们如何调用评估输出。
有没有人知道一个简单的“如何使用Saxon walk-through运行简单的XPath表达式?”这是针对9.x.x模式编写的?或者看看究竟我想不出来的东西?
我知道我可能会使用不同的API来运行简单的XPath,但我的前辈们已经了解了一些模式,我想确保我们的单元测试与我们的底层转换引擎相匹配。
感谢您的帮助。我相信这很容易执行。