使用JXPath查询Java对象

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

  指针 Pointers

  指针是JXPath的一个工具类,用来代表对象树中的一个对象的引用,比如,一个指针可能代表了第二个部门的第一个员工,相比于直接从对象树中查找对象的对象,指针提供了一些额外的功能,比如在相关上下文下的相关查询,下面有具体的例子:

  使用指针

  使用指针指向一个对象和从对象树中获取一个对象是相等的:

JXPathContext context = JXPathContext.newContext(company);Pointer empPtr = context.getPointer(“/departmentList[name=’Sales’]/employees[age>40]”);

System.out.println(empPtr);//output: /departmentList[1]/employees[1]

System.out.println(((Employee)empPtr.getValue()).getName());//output: Johnny

  可以看出,一个指针只是代表了一个对象的位置,而不是对象本身,同时也可以看出,可以通过指针的getValue方法获取指针代表的对象。

  相关上下文下的相关查询由于指针是代表对象的位置,所以可以被用来作为整个对象树来导航的一个引用,为了做到这点,我们可以把指针指向根对象(就好像上面例子中的公司对象),也就是所谓的相关上下文,在相关上下文,你可以通过相关查询进行整个对象树的查询,指针的这个高级使用提供了极大的弹性,下面我们例子说明:

  开始,我们来创建一个相关上下文:

for(Iterator iter = context.iteratePointers(“/departmentList[name=’Sales’]/employees[age>30]”); iter.hasNext();){Pointer empPtr = (Pointer)iter.next();JXPathContext relativeContext = context.getRelativeContext(empPtr);}

  使用相关上下文,XPath 查询能够在对象树的子节点,父节点,超父节点等进行执行,具体看下面的例子:

//Current employeeEmployee emp = (Employee)relativeContext.getValue(“.”);

//Employee nameString name = (String)relativeContext.getValue(“./name”);

//Name of the Department this Employee belongs to (a parent object)String deptName = (String)relativeContext.getValue(“../name”);

//Name of the Company this Employee belongs to (a ‘grandparent’ object)String compName = (String)relativeContext.getValue(“../../name”);

//All coworkers of this Employee (sibling objects)for(Iterator empIter = relativeContext.iterate(“../employees”); empIter.hasNext();){Employee colleague = (Employee)empIter.next();//}

  总结

  JXPath 在遍历,导航,和查询复杂的对象树时是非常有用的工具,由于它使用 xpath 语言 进行查询,因此有大量的资料可以帮助构建高效的复杂对象树查询,指针和相关上下文的加入使得查询更加方便。

[1][2][3]

生命太过短暂,今天放弃了明天不一定能得到

使用JXPath查询Java对象

相关文章:

你感兴趣的文章:

标签云: