【问题标题】:JXPath - xpath evaluation on a java objects tree structureJXPath - 对 java 对象树结构的 xpath 评估
【发布时间】:2015-04-28 10:44:58
【问题描述】:

我有一个使用 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 模型相比,在容器中,您无法从上下文节点直接访问根节点。

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

【问题讨论】:

    标签: java xpath jxpath


    【解决方案1】:

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

    我为变量“__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/");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 2017-03-24
      • 2020-06-30
      • 2012-02-25
      • 2019-08-20
      • 1970-01-01
      相关资源
      最近更新 更多