扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
执行简单的JXPath 查询
最简单的查询就是从对象树中查找一个对象,例如,要查找公司,用下面的代码:
JXPathContext context = JXPathContext.newContext(company); Company c = (Company)context.getValue("."); |
第一行展示了context (上下文)的创建,也就是对象树中所有JXPath的xpath 规则的起始点(相当于XML文档的根节点元素)。
第二行执行了实际的查询,因为这里的上下文是以公司开始的,所以要获取公司对象,只需要使用当前元素选择器“。”。
使用谓词和变量
一个员工是部门的子对象,获取员工名为johnny 的代码如下:
Employee emp = (Employee)context.getValue("/departmentList/employees[name='Johnny']"); |
这段代码可以这样理解:遍历所有的部门寻找姓名为johnny的员工
上面的代码段解释了如何使用谓词进行对象的搜索,使用谓词相当于SQL语句中的where字句,我们可以绑定多条谓词:
Employee emp = (Employee)context.getValue("/departmentList/employees[name='Susan' and age=27]"); |
如果你不是只进行一次查询的话,像上面这样的硬编码一般都不可取,更好的方法是定义一个可重用的查询,那么你就可以在多条语句中进行重用,为适应参数化的查询JXPath 支持变量查询,代码如下:
context.getVariables().declareVariable("name", "Susan"); context.getVariables().declareVariable("age", new Integer(27)); Employee emp = (Employee)context.getValue("/departmentList/employees[name=$name and age=$age]"); |
对于集合元素的迭代
JXPath 提供了一个迭代器,可以对查询的结果进行迭代,下面的代码:
for(Iterator iter = context.iterate("/departmentList"); iter.hasNext();)...{ Department d = (Department)iter.next(); //... } |
迭代所有员工的代码如下:
for(Iterator iter = context.iterate("/departmentList/employees"); iter.hasNext();)...{ Employee emp = (Employee)iter.next(); //... } |
下面是一个结合变量绑定和迭代的例子:
context.getVariables().declareVariable("deptName", "Sales"); context.getVariables().declareVariable("minAge", new Integer(30)); for(Iterator iter = context.iterate("/departmentList [name=$deptName]/employees[age>$minAge]"); iter.hasNext();){ Employee emp = (Employee)iter.next(); // } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者