Skip to content

JDOM XPath 的 Namespace 處理

三月 4, 2010

JDOM 的 XPath 並沒有辦法處理含有 Namespace 的 XML Document 物件,這使得在處理 XML 資料時往往沒辦法用 XPath 來快速抓取節點,因為 selectSingleNode()/selectNodes() 取回來的物件或集合都為空,昨天發狠決定要找出解決的方式,總算這問題有解了。

Jaxen 的 JDOMXPath 類別是 XPath 介面的實作,專門給 JDOM 的 XML Document 來進行 XPath 運算,這個介面有提供一個 method 叫 setNamespaceContext() 可以來傳入自訂的 Namespace 資訊,將 Namespace 的 prefix 與 URI 組成一 Map 後建立 SimpleNamespaceContext 類別並傳入即可︰


map = new HashMap();
map.put("hpMain", "http://www.daisy.org/z3986/2005/ncx/");
XPath itemXPath = new JDOMXPath("//hpMain:content");
itemXPath.setNamespaceContext(new SimpleNamespaceContext(map));

於是再利用這個 XPath 物件取 selectSingleNode() 或 selectNodes() 便可以順利傳回節點集合。請參考 XPath and Default Namespace handling 這篇文章,有介紹各類實作 XPath 的套件要怎麼解決 Namespace 的問題。

廣告
No comments yet

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: