Commons JXPath - Object Graph Traversal
JXPath 提供了使用 Xpath 语法操纵符合 Java 类命名规范的 JavaBeans 的工具。也支持 maps、DOM 和其他对象模型。对于深层次结构的 JavaBean,使用 JXPath 可以方便地访问深层次的属性,而免去了繁琐的 getter/setter 操作。
以下面的 JavaBeans 为例。
- package com.huey.jxpath;
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import lombok.NoArgsConstructor;
- @Data
- @NoArgsConstructor
- @AllArgsConstructor
- public class Book {
- private String title;
- private Author[] authors;
- private Publisher publisher;
- private String isbn;
- private double price;
- }
Book.java
- package com.huey.jxpath;
- import java.util.Date;
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import lombok.NoArgsConstructor;
- @Data
- @NoArgsConstructor
- @AllArgsConstructor
- public class Author {
- private String firstName;
- private String lastName;
- private char gender;
- private Date birthday;
- }
Author.java
- package com.huey.jxpath;
- import java.util.Map;
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import lombok.NoArgsConstructor;
- @Data
- @NoArgsConstructor
- @AllArgsConstructor
- public class Publisher {
- private String name;
- private String address;
- private Map<String, String> contacts;
- }
Publisher.java
初始化
- Author[] authors;
- Publisher publisher;
- Book book;
- authors = new Author[] {
- new Author("Eric", "Freeman", 'F', new Date()),
- new Author("ElElisabeth", "Freeman", 'M', new Date())
- };
- Map<String, String> contacts = new HashMap<String, String>();
- contacts.put("tel", "010-12345678");
- contacts.put("fax", "010-87654321");
- contacts.put("email", "test@163.com");
- publisher = new Publisher("中国电力出版社", "北京市XX区YY路Z号", contacts);
- book = new Book("Head First Design Patterns", authors, publisher, "9787508353937", 98.0);
JavaBean Property Access
- JXPathContext context = JXPathContext.newContext(book);
- String title = (String) context.getValue("title");
- Publisher publisher = (Publisher) context.getValue("publisher");
Lenient Mode
当提供的 xpath 无法映射到 JavaBean 的属性时,context.getValue(xpath) 方法会抛出一个异常;而如果调用方法 context.setLenient(true),则会返回 null。
Nested Bean Property Access
- JXPathContext context = JXPathContext.newContext(book);
- String pName = (String)context.getValue("publisher/name");
- char aGender = (Character)context.getValue("authors[firstName='Eric']/gender");
Collection Subscripts
- JXPathContext context = JXPathContext.newContext(book);
- Author author = (Author) context.getValue("authors[1]"); // 集合第一个元素的下标是 1 而不是 0
Retrieving Multiple Results
- JXPathContext context = JXPathContext.newContext(book);
- Iterator<?> authors = context.iterate("authors");
- while (authors.hasNext()) {
- Author author = (Author) authors.next();
- // ...
- }
Map Element Access
- JXPathContext context = JXPathContext.newContext(publisher);
- String tel = (String) context.getValue("contacts/tel");
- String fax = (String) context.getValue("contacts[@name='fax']");
String email = (String) context.getValue("contacts/attribute::email");
Commons JXPath - Object Graph Traversal的更多相关文章
- Commons JXPath - Modifying Object Graphs
JXPath 除了可以 XPath 语法访问 JavaBeans.DOM/JDOM,也可以对其属性赋值. 以下面的 JavaBeans 为例. package com.huey.jxpath; imp ...
- [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 ...
- Xwork概况 XWork是一个标准的Command模式实现,并且完全从web层脱离出来。Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph NavigationLanguage),IoC(Inversion of Control反转控制)容器等。 ----------------
Xwork概况 XWork是一个标准的Command模式实现,并且完全从web层脱离出来.Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式 ...
- [Algorithms] Graph Traversal (BFS and DFS)
Graph is an important data structure and has many important applications. Moreover, grach traversal ...
- Commons JXPath - DOM/JDOM Document Access
除了 JavaBean,JXPath 也可以访问 DOM/JDOM. 示例 XML: <?xml version="1.0" encoding="utf-8&quo ...
- Commons JXPath - Extension Functions
Standard Extension Functions 创建新的对象 JXPathContext context = JXPathContext.newContext(null); Book boo ...
- Object Graph Serialization
http://coding-time.blogspot.com/2008/03/serialize-object-graph-to-xml-in-net.html http://trycatch.me ...
- Struts_OGNL(Object Graph Navigation Language) 对象图导航语言
1.访问值栈中的action的普通属性: 请求: <a href="ognl.action?username=u&password=p">访问属性</a& ...
- Table of Contents - Apache Commons
Apache Commons 简述 CLI Usage of CLI Option Properties Codec 常见的编码解码 Compress Configuration2 Quick sta ...
随机推荐
- UVa 1640 The Counting Problem (数学,区间计数)
题意:给定两个数m, n,求从 m 到 n 中0-9数字各出现了多少次. 析:看起来挺简单的,其实并不好做,因为有容易想乱了.主要思路应该是这样的,分区间计数,先从个位进行计,一步一步的计算过来.都从 ...
- MSSQL导入数据时,出现“无法截断表 因为表正由Foreign key引用”错误
* 错误 0xc002f210: 准备 SQL 任务: 执行查询“TRUNCATE TABLE [dsc100552_db].[dbo].[ALV_SalesBigClass] ”失败,错误如下:“无 ...
- ABA problem
多线程及多进程编程同步时可能出现的问题,如果一个值被P1读取两次,两次的值相同,据此判断该值没有被修改过,但该值可能在两次读取之间被P2修改为另外一个value,并在P1再次读取之前修改回了原值.P1 ...
- php 常用设计模式详解
1.单例模式 构造函数必须为private 一个保存类实例静态成员变量 拥有一个访问这个实例的公共静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到 ...
- sql 指令
SELECT 是用来做什么的呢?一个最经常使用的方式是将资料从数据库中的表格内选出.从这一句回答中.我们立即能够看到两个keyword:从 (FROM)数据库中的表格内选出 (SELECT).(表格是 ...
- Hdu 5568 sequence2 高精度 dp
sequence2 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=556 ...
- CDOJ 481 Apparent Magnitude 水题
Apparent Magnitude Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/sh ...
- xcode 左边导航栏中,类文件后面的标记“A”,"M","?"……等符号的含义???
"M" = Locally modified "U" = Updated in repository "A" = Locally a ...
- java中的正则操作总结
http://www.cnblogs.com/nerxious/archive/2013/01/03/2842910.html 正则表达式在处理字符串的效率上是相当高的 关于正则表达式的使用,更多的是 ...
- 解决MySQL不允许从远程访问的方法
mysql -u root -p mysql>use mysql; mysql>select 'host' from user where user='root'; mysql>up ...