首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超类中的jXPath查询属性

超类中的jXPath查询属性
EN

Stack Overflow用户
提问于 2013-02-13 00:12:16
回答 1查看 808关注 0票数 4

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

在这个BaseDomain类中,我有一个公开的最终字符串名的字段;

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

代码语言:javascript
复制
public class BaseDomain {
    public final String name;
    public BaseDomain() {
    this.name = this.getClass().getCanonicalName();
    }
}

该BaseDomain由几个类扩展而成

代码语言:javascript
复制
public class Trip extends BaseDomain {
    private int id;
    public Trip(int id){
        this.id = id;
    }

}

到目前一切尚好。

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

代码语言:javascript
复制
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可能包含一个位置列表,该列表也扩展了BaseDomain。每个位置都可以包含一个扩展BaseDomain的PointOfInterest列表。

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

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

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

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

最简单的方法,即使它很难看,也是在超类中有一个包含类名的字段。这就是为什么我要做这个丑陋的解决方案。

最终,我想创建一个jxpath查询,它基于trip返回一个迭代器,该迭代器的对象是任何深度的BaseDomain实例,而不是依赖于节点在对象树中的哪个分支,只要我能获得我正在寻找的对象的类名。

有没有人知道是否有可能使用jxpath-query来实现这一点?

代码示例,到博客或其他文档的链接是欢迎和赞赏的。

像以前一样,我非常感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2013-02-13 01:21:19

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

代码语言:javascript
复制
 string n = trip.name;

我可以看到你有一个旅行的可扩展标记语言表示,但是当你只有' trip‘的可扩展标记语言时,使用XPath。

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

代码语言:javascript
复制
// not sure about this approach
JXPathContext jxPathContext = JXPathContext.newContext(trip.super); 

在看过关于父母/孩子关系的JXPath manual之后,你为什么不试试这个:

代码语言:javascript
复制
String name = (String)jxPathContext.getValue("/Trip/../@name");    
// or use "../@name", not sure it wouldn't need to be "/../@name"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14836781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档