JXPath 提供了使用 Xpath 语法操纵符合 Java 类命名规范的 JavaBeans 的工具。也支持 maps、DOM 和其他对象模型。对于深层次结构的 JavaBean,使用 JXPath 可以方便地访问深层次的属性,而免去了繁琐的 getter/setter 操作。

以下面的 JavaBeans 为例。

  1. package com.huey.jxpath;
  2.  
  3. import lombok.AllArgsConstructor;
  4. import lombok.Data;
  5. import lombok.NoArgsConstructor;
  6.  
  7. @Data
  8. @NoArgsConstructor
  9. @AllArgsConstructor
  10. public class Book {
  11.  
  12. private String title;
  13. private Author[] authors;
  14. private Publisher publisher;
  15. private String isbn;
  16. private double price;
  17.  
  18. }

Book.java

  1. package com.huey.jxpath;
  2.  
  3. import java.util.Date;
  4.  
  5. import lombok.AllArgsConstructor;
  6. import lombok.Data;
  7. import lombok.NoArgsConstructor;
  8.  
  9. @Data
  10. @NoArgsConstructor
  11. @AllArgsConstructor
  12. public class Author {
  13.  
  14. private String firstName;
  15. private String lastName;
  16. private char gender;
  17. private Date birthday;
  18.  
  19. }

Author.java

  1. package com.huey.jxpath;
  2.  
  3. import java.util.Map;
  4.  
  5. import lombok.AllArgsConstructor;
  6. import lombok.Data;
  7. import lombok.NoArgsConstructor;
  8.  
  9. @Data
  10. @NoArgsConstructor
  11. @AllArgsConstructor
  12. public class Publisher {
  13.  
  14. private String name;
  15. private String address;
  16. private Map<String, String> contacts;
  17.  
  18. }

Publisher.java

初始化

  1. Author[] authors;
  2. Publisher publisher;
  3. Book book;
  4.  
  5. authors = new Author[] {
  6. new Author("Eric", "Freeman", 'F', new Date()),
  7. new Author("ElElisabeth", "Freeman", 'M', new Date())
  8. };
  9.  
  10. Map<String, String> contacts = new HashMap<String, String>();
  11. contacts.put("tel", "010-12345678");
  12. contacts.put("fax", "010-87654321");
  13. contacts.put("email", "test@163.com");
  14. publisher = new Publisher("中国电力出版社", "北京市XX区YY路Z号", contacts);
  15.  
  16. book = new Book("Head First Design Patterns", authors, publisher, "9787508353937", 98.0);

JavaBean Property Access

  1. JXPathContext context = JXPathContext.newContext(book);
  2. String title = (String) context.getValue("title");
  3. Publisher publisher = (Publisher) context.getValue("publisher");

Lenient Mode

当提供的 xpath 无法映射到 JavaBean 的属性时,context.getValue(xpath) 方法会抛出一个异常;而如果调用方法 context.setLenient(true),则会返回 null。

Nested Bean Property Access

  1. JXPathContext context = JXPathContext.newContext(book);
  2. String pName = (String)context.getValue("publisher/name");
  3. char aGender = (Character)context.getValue("authors[firstName='Eric']/gender");

Collection Subscripts

  1. JXPathContext context = JXPathContext.newContext(book);
  2. Author author = (Author) context.getValue("authors[1]"); // 集合第一个元素的下标是 1 而不是 0

Retrieving Multiple Results

  1. JXPathContext context = JXPathContext.newContext(book);
  2. Iterator<?> authors = context.iterate("authors");
  3. while (authors.hasNext()) {
  4. Author author = (Author) authors.next();
  5. // ...
  6. }

Map Element Access

  1. JXPathContext context = JXPathContext.newContext(publisher);
  2. String tel = (String) context.getValue("contacts/tel");
  3. String fax = (String) context.getValue("contacts[@name='fax']");
    String email = (String) context.getValue("contacts/attribute::email");

Commons JXPath - Object Graph Traversal的更多相关文章

  1. Commons JXPath - Modifying Object Graphs

    JXPath 除了可以 XPath 语法访问 JavaBeans.DOM/JDOM,也可以对其属性赋值. 以下面的 JavaBeans 为例. package com.huey.jxpath; imp ...

  2. [Javascript] Creating an Immutable Object Graph with Immutable.js Map()

    Learn how to create an Immutable.Map() through plain Javascript object construction and also via arr ...

  3. Xwork概况 XWork是一个标准的Command模式实现,并且完全从web层脱离出来。Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph NavigationLanguage),IoC(Inversion of Control反转控制)容器等。 ----------------

    Xwork概况 XWork是一个标准的Command模式实现,并且完全从web层脱离出来.Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式 ...

  4. [Algorithms] Graph Traversal (BFS and DFS)

    Graph is an important data structure and has many important applications. Moreover, grach traversal ...

  5. Commons JXPath - DOM/JDOM Document Access

    除了 JavaBean,JXPath 也可以访问 DOM/JDOM. 示例 XML: <?xml version="1.0" encoding="utf-8&quo ...

  6. Commons JXPath - Extension Functions

    Standard Extension Functions 创建新的对象 JXPathContext context = JXPathContext.newContext(null); Book boo ...

  7. Object Graph Serialization

    http://coding-time.blogspot.com/2008/03/serialize-object-graph-to-xml-in-net.html http://trycatch.me ...

  8. Struts_OGNL(Object Graph Navigation Language) 对象图导航语言

    1.访问值栈中的action的普通属性: 请求: <a href="ognl.action?username=u&password=p">访问属性</a& ...

  9. Table of Contents - Apache Commons

    Apache Commons 简述 CLI Usage of CLI Option Properties Codec 常见的编码解码 Compress Configuration2 Quick sta ...

随机推荐

  1. UVa 1640 The Counting Problem (数学,区间计数)

    题意:给定两个数m, n,求从 m 到 n 中0-9数字各出现了多少次. 析:看起来挺简单的,其实并不好做,因为有容易想乱了.主要思路应该是这样的,分区间计数,先从个位进行计,一步一步的计算过来.都从 ...

  2. MSSQL导入数据时,出现“无法截断表 因为表正由Foreign key引用”错误

    * 错误 0xc002f210: 准备 SQL 任务: 执行查询“TRUNCATE TABLE [dsc100552_db].[dbo].[ALV_SalesBigClass] ”失败,错误如下:“无 ...

  3. ABA problem

    多线程及多进程编程同步时可能出现的问题,如果一个值被P1读取两次,两次的值相同,据此判断该值没有被修改过,但该值可能在两次读取之间被P2修改为另外一个value,并在P1再次读取之前修改回了原值.P1 ...

  4. php 常用设计模式详解

    1.单例模式 构造函数必须为private 一个保存类实例静态成员变量 拥有一个访问这个实例的公共静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到 ...

  5. sql 指令

    SELECT 是用来做什么的呢?一个最经常使用的方式是将资料从数据库中的表格内选出.从这一句回答中.我们立即能够看到两个keyword:从 (FROM)数据库中的表格内选出 (SELECT).(表格是 ...

  6. Hdu 5568 sequence2 高精度 dp

    sequence2 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=556 ...

  7. CDOJ 481 Apparent Magnitude 水题

    Apparent Magnitude Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/sh ...

  8. xcode 左边导航栏中,类文件后面的标记“A”,&quot;M&quot;,&quot;?&quot;……等符号的含义???

    "M" = Locally modified    "U" = Updated in repository  "A" = Locally a ...

  9. java中的正则操作总结

    http://www.cnblogs.com/nerxious/archive/2013/01/03/2842910.html 正则表达式在处理字符串的效率上是相当高的 关于正则表达式的使用,更多的是 ...

  10. 解决MySQL不允许从远程访问的方法

    mysql -u root -p mysql>use mysql; mysql>select 'host' from user where user='root'; mysql>up ...