我正在从XPath 1.0升级到XPath 3.1。我在XPath 1.0中使用了javax.xml.xpath
库,现在使用的是Saxon-HE
库。移植代码非常简单,我使用S9API接口来计算表达式,正如saxon建议的那样。
然而,有一小部分代码,我似乎无法弄清楚如何迁移:
public static Object getXpathValueFromContentMap(String name, Map<String, Object> content, boolean list) {
try {
if (list) {
return newArrayList(JXPathContext.newContext(content).iterate(name));
} else {
return JXPathContext.newContext(content).getValue(name);
}
} catch (JXPathNotFoundException ignore) {
return null;
}
}
这个方法在Map上计算一个xpath表达式。这可以用saxon库来完成吗?如果可以,怎么做?
1条答案
按热度按时间y4ekin9u1#
JXPath(我以前没有遇到过)似乎是XPath1.0在Java数据结构(如Map和数组的XML节点视图)上的实现。
Saxon没有类似的功能。在XPath3.1中,将JavaMap和数组解释为XPath3.1Map和数组要合适得多,而不是通过XML节点视图进行解释。然而,用于实现这一点的XPath表达式将有很大不同。
从理论上讲,可以在外部数据结构上提供Saxon格式的XMLMap,但这是一个非常大的工作量,而且似乎不是正确的方法,但这取决于您有多少XPath代码需要转换。