傳統上訪問 JavaBean 屬性使用點號路徑(如 addressbook[1].state.code),Apache Commons JXPath 專案現讓我們能將 XPath 規範的強大功能直接應用於普通 JavaBean 物件圖,實現更靈活、更豐富的數據導航與操作。
address[number='21']/town/name)、軸向導航等 XPath 全功能集。. 改為斜線 /,學習成本極低。假設領域模型如下:
Person.name // String
Person.age // int
Person.birthtown // Town 對象
Person.address[] // Address 陣列
Town.name // String
Address.number // String
Address.street // String
Address.town // Town 對象
使用 JXPath 進行查詢:
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")); // 編號 21 的街道
System.out.println(context.getValue("address[number='21']/town/name")); // 編號 21 關聯城鎮名
除讀取外,XPath 同樣可用於設置值或動態創建 Bean 節點。更多詳細用法請參考 JXPath 官方文檔。
JXPath 將成熟的 XPath 標準引入 JavaBean 操作領域,極大擴展了屬性導航的表達能力,特別適合處理複雜巢狀物件圖的查詢與操作場景,是 Java 開發工具箱中的利器。