簡體   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