1

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

context.getValue("/myCollection"); 返回 myCollection - 好的

context.getValue("//myCollection"); 返回 myCollection - 好的

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

行后 context.getValue("/myCollection//.[rules:getName() = 'secondName']"); 不执行下一行。也不例外,并且没有设置宽松模式。我不明白发生了什么事。第 8 行的Rules类打印"POINTER SET ON /myCollection[1]"。我想在这个例子中得到的元素是 in /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 是错误的。

4

1 回答 1

1

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

于 2012-11-18T00:09:59.773 回答