gpt4 book ai didi

java - JXPath - java 对象树结构上的 xpath 评估

转载 作者:行者123 更新时间:2023-12-01 11:36:35 27 4
gpt4 key购买 nike

我有一个使用 java 列表和映射创建的 java 对象树结构(模型),我想评估以下类型的 xpath:

name[/type='theType']

这个 xpath 表达式需要上下文节点和根节点。但是,我没有找到如何将两个节点传递给 JXPath 进行评估的方法。我尝试了以下代码的几种变体(尝试交换根和上下文,用 null 代替 rootContext 等):

JXPathContext rootContext = JXPathContext.newContext(rootNode);
JXPathContext contextContext = JXPathContext.newContext(rootContext, contextNode);
Pointer p = contextContext.getPointer(xpath);
return p.getNode();

但没有任何效果。与 XML DOM 模型相比,在容器中您无法直接访问上下文节点到根节点。

您对如何做到这一点有什么建议吗?

最佳答案

在有人提出直接解决方案之前,我已经通过这种方式解决了问题:

我为变量“__root”创建了一个变量解析器,并将其设置为 jxpath 上下文,如下所示:

xpathContext.setVariables(new JXPathVariablesResolver(...));

然后我找到 xpath 中的所有根引用并将其替换为“$__root/”:

String xpFixed = fixAbsoluteXPaths(xp);
Pointer p = xpathContext.getPointer(xpFixed);

这里是使用的函数:

public static final Pattern reAbsInnerXPath = Pattern.compile(
"(^|[\\(\\[\\|,])\\s*/"); //TODO: avoid matches inside strings

protected String fixAbsoluteXPaths(String xpath) {
Matcher m = reAbsInnerXPath.matcher(xpath);
return m.replaceAll("$1\\$__root/");
}

关于java - JXPath - java 对象树结构上的 xpath 评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29917235/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com