向一個 JavaBean 請求 'addressbook[1].state.code' 是現在還在使用的和 JavaBeans 進行交互的一個通常方法,但是你現在可以更進一步使用功能更強大的 XPath 規範。
創建 XPath 的目的是訪問和修改 XML 中的資料,但是 Apache Jakarta 的一個新項目允許你將強大的 XPath 規範的功能應用到普通的 JavaBeans 上。
作為一個例子,我們使用具有下面結構的 JavaBean:
Person.name 是一個字串 StringPerson.age 是一個整數Person.birthtown 是一個 Town 物件Person.address 是一個 Address 物件的陣列Town.name 是一個字串Address.number 是一個字串Address.street 是一個字串Address.town 是一個 Town 物件(為了簡單沒有提供原始碼)
對於給定的 Person 物件,你可以使用 "name" 得到物件的名字,你可以使用 "birthtown/name" 得到出生地的名字,你也可以使用 "address[number='21']/town/name" 得到和地址(例如 21)關聯的城鎮的名字。
除了更強大以外,XPath 和通常的 Bean 符號的主要不同是使用反斜線('/')而不是句點('.')分隔元素,一旦你習慣這個特徵就都會變得很簡單。
import org.apache.commons.jxpath.JXPathContext;
// ...
Person person = ...;
JXPathContext context = JXPathContext.newContext(person);
System.out.println(context.getValue("name"));
System.out.println(context.getValue("age"));
System.out.println(context.getValue("birthtown/name"));
System.out.println(context.getValue("address[number='21']/street"));
System.out.println(context.getValue("address[number='21']/town/name"));
// ...
XPath 可以用於設定值或者創建 Beans,當然也可以讀取值,關於 XPath 和它的 JXPath 實現的更多資訊請參考 JXPath 官方網站。