在JavaMap上执行XPath 3.1

r55awzrz  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(96)

我正在从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库来完成吗?如果可以,怎么做?

y4ekin9u

y4ekin9u1#

JXPath(我以前没有遇到过)似乎是XPath1.0在Java数据结构(如Map和数组的XML节点视图)上的实现。
Saxon没有类似的功能。在XPath3.1中,将JavaMap和数组解释为XPath3.1Map和数组要合适得多,而不是通过XML节点视图进行解释。然而,用于实现这一点的XPath表达式将有很大不同。
从理论上讲,可以在外部数据结构上提供Saxon格式的XMLMap,但这是一个非常大的工作量,而且似乎不是正确的方法,但这取决于您有多少XPath代码需要转换。

相关问题