内存中树对象的树查询语言?

时间:2012-04-04 16:51:47

标签: java tree

有哪些选项,最好是Java?

我见过JXPath将XPath扩展到对象。还有别的吗?

编辑:通过树查询语言,我的意思是一种语言,可以创建与组织到树中的对象(通过任何属性)匹配的表达式。

Edit2:示例:

我们说我有一棵树这些物体:

public interface Node {
  String getName();
  int getValue();
  String getSomeOtherAttribute();
  List<Node> getChildren();
  Node getParent();
}

现在想象一下这些的层次结构。我正在寻找的是可以查询此树中的实例的东西。例如&#34;给我所有名称为&#34; bar&#34;的节点实例,值小于100,父亲是&#34; foo&#34;父母的父母是&#34;乔&#34;。所有这些都用一种简洁的语言表达。

正如我所说,JXPath是一种选择。寻找他人。我还没找到。

BTW,我认为JXPath查询看起来像&#34; // joe / foo / bar [@value&lt; 100]&#34; (或类似的东西)

someroot
    |
   joe
 / | \
c  d  foo
     / \
    f   bar,99   

1 个答案:

答案 0 :(得分:1)

对于您自己创建的树结构,您可以应用Visitor Pattern。让您的节点接受访问者并编写检查标准并收集对象的各种访问者。

使用访问者还意味着您的代码将类型安全,而不是字符串中的查询。如果重命名getter方法,IDE将在所有访问者中重命名它们,您的代码仍然有效。如果您的查询在字符串中,则可能会中断。

除了JXPath之外,还有JoQL使用类似SQL的语言来查询对象,但它并不是真正用于树类型结构。