在JXPath中使用//运算符

时间:2012-11-17 23:30:36

标签: java xpath data-structures tree jxpath

某些根对象具有字段MyCollection myCollection。类MyCollection实现Collection接口。通过调用someService().getName()可以获得元素的名称,这就是我创建Rules类的原因。

context.getValue("/myCollection"); 返回myCollection - 确定

context.getValue("//myCollection"); 返回myCollection - 确定

context.getValue("/myCollection/.[rules:getName() = 'secondName']"); 返回IMyNode返回someService().getName()的实例 “secondName” - 确定

排队 context.getValue("/myCollection//.[rules:getName() = 'secondName']"); 下一行未执行。也没有例外,宽松模式是 没有设置。我不明白发生了什么。 Rules类的第8行打印"POINTER SET ON /myCollection[1]"。我希望在此示例中获得的元素位于/myCollection[2]

这是获取元素名称的位置。我认为这个课程是正确的。

public class Rules {
public static String getName(ExpressionContext context){
   Pointer pointer = context.getContextNodePointer();
    if(pointer == null){
        return "";
    } else {
        if(pointer.getValue() instanceof IMyNode){
        System.out.println("POINTER SET ON " + pointer);
            IMyNode node = (IMyNode)pointer.getValue();
           return node.someService().getName();
       }
   }
   return "";
}
}

修改 这个问题是关于 JXPath 。添加标记xpath而不是jxpath我错了。

1 个答案:

答案 0 :(得分:1)

尝试使用*代替.。此外,我认为您可以使用标准XPath函数local-name()而不是rules:getName()