向一個JavaBean請求'addressbook[1].state.code'是現在還在使用的和JavaBeans 進行交互的一個通常的方法,但是你現在可以更進一步使用功能更強大的XPath規范。
創建XPath的目的是訪問和修改XML中的數據,但是apache Jakarta的一個新項目允許你將強大的XPath規范的功能應用到普通的JavaBeans上。
作為一個例子,我們使用具有下面的結構的JavaBean :
以下為引用的內容:
Person.name 是一個字符串 String
Person.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符號的主要不同是使用反斜線('/')而不是句點('.')分隔元素,一旦你習慣這個特征就都會變得很簡單。
下面的代碼展示了使用JXPath 將XPath 符號應用到我們的JavaBean 結構是多麼的簡單:
以下為引用的內容:
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站點 。