9

有哪些选择,最好是在 Java 中?

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

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

编辑2:示例:

假设我有这些对象的树:

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

现在想象一下这些的层次结构。我正在寻找的是可以在这棵树中查询实例的东西。例如“给我所有名称为“bar”、值小于 100 且父节点为“foo”且父节点的父节点为“joe”的 Node 实例。所有这些都使用了简洁的语言。

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

顺便说一句,我认为 JXPath 查询看起来像“//joe/foo/bar[@value < 100]”(或类似的东西)

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

1 回答 1

1

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

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

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

于 2012-04-05T16:09:19.137 回答