java - 父类(super class)中的 jXPath 查询属性

标签 java inheritance attributes jxpath

我有几个领域类,它们都继承了一个 BaseDomain 类。

在这个 BaseDomain 类中,我有一个字段是 public final String name;

name 的值在构造函数中设置。

public class BaseDomain {
    public final String name;
    public BaseDomain() {
    this.name = this.getClass().getCanonicalName();
    }
}

这个 BaseDomain 由几个类扩展

public class Trip extends BaseDomain {
    private int id;
    public Trip(int id){
        this.id = id;
    }

}

到目前为止一切顺利。

我想在 JXPath 的帮助下获取 a 的 Trip 对象实例中字段“name”的值,但不能。我可以访问“id”字段但不能访问“name”字段。

JXPathContext jxPathContext = JXPathContext.newContext(trip);
jxPathContext.setLenient(true);
int id = (int)jxPathContext.getValue("/@id"); // This works. 
String name = (String)jxPathContext.getValue("/@name"); // This does not work. 

是否可以使用此设置和 JXPath 获取“name”的值?

代码可能有一些语法错误和/或其他错误。我希望你们都能理解并理解我的问题。

欢迎任何帮助或指点。

首先:我要感谢 Kelly S. French 的快速重播。 这让我意识到我必须再解释一些。

我想使用jxpath,因为我最终会进行更深入的搜索。例如:Trip 可能包含一个 Locations 列表,它也扩展了 BaseDomain。每个 Location 都可以包含一个扩展 BaseDomain 的 PointOfInterest 列表。

通过在代码的其他部分进行反射,我希望能够根据它们的类型 (class.getCanonicalName()) 获取 BaseDomain 列表

对象树不是基于 xml,它是纯 POJO。

据我所知,没有办法编写 jxpath 查询来根据对象的类型、类名等查找对象列表。

这是正确的吗? 有人知道这样做的方法吗?

最简单的方法,即使它很丑陋,也就是在父类(super class)中有一个字段来保存类名。这就是为什么我做了这个丑陋的解决方案。

最后,我想创建一个 jxpath-query,它基于 trip 返回一个迭代器,该迭代器是任何深度的 BaseDomain 实例的对象,而不取决于节点位于对象树中的哪个分支,只要因为我可以获得我正在寻找的对象的类名。

有谁知道是否可以通过 jxpath-query 实现这一点?

欢迎并赞赏代码示例、博客或其他文档的链接。

和以前一样,我非常感谢任何帮助。

最佳答案

如果你有 trip 实例,你为什么不能这样做

 string n = trip.name;

我可以看到您有旅行的 XML 表示,但是当您只有“旅行”的 XML 时,可以使用 XPath。

如果您仍然需要使用 XPath 获取名称,请发布生成的 XML。我愿意打赌名称属性不是 Trip 的一部分,而是封闭的 BaseDomain 的一部分。如果您将 jxPathContext 基于 Trip,则您已经传递了 BaseDomain 的节点。您必须以某种方式返回导航(例如 node.parent)或在创建上下文时执行此操作,

// not sure about this approach
JXPathContext jxPathContext = JXPathContext.newContext(trip.super); 

看了JXPath manual之后关于 parent / child 的关系,你为什么不试试这个:

String name = (String)jxPathContext.getValue("/Trip/../@name");    
// or use "../@name", not sure it wouldn't need to be "/../@name"

关于java - 父类(super class)中的 jXPath 查询属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14836781/

相关文章:

android - 如何允许自定义 View 的 XML 属性由资源 ID 或值指定?

c# - 路由的属性帮助,编译器错误

java - 使用计时器为 JPanel(滑入)设置动画

带有用户输入击键的 Java Switch

java - JUnit 测试用例 - 看不到类

使用静态变量的 C++ 继承成员函数

c# - Visual Studio 2015 中的隐藏/折叠属性

java - jUnit:外部化预期的字符串输出

Java:方法的继承

python - 在python中初始化类内的子类