繁体   English   中英

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

[英]JXPath - xpath evaluation on a java objects tree structure

我有一个使用Java Lists和Maps创建的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/");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM