2010-12-03 18 views
1

我想從android(java)的xml文檔檢索一個節點。JAXP XPathFactory命名空間

<?xml version="1.0" encoding="utf-8" ?> 
<config:Manifest xmlns:config="http://leaflabs.com/manifest.config.xsd"> 
    <config:Text config:name="siteowner" config:desc="Site owner" config:transform="title"/> 
    <config:Text config:name="siteowner1" config:desc="Site owner" config:transform="title"/> 
</config:Manifest> 

XPATH

config:Manifest/config:Text[@config:name='siteowner'] 

我使用JAXP的XPathFactory。我得到的問題是每次都返回null。

我完全相信我的XPath是正確的確信我的文檔構建NamespaceAware設置爲true,我甚至跟着一個Example (在頁面的底部)實現需要使用NamespaceContext但我仍然什麼也得不到。

我看着一個計算器後,但沒人接傢伙 Link

我在做什麼錯

+1

只要上下文節點是文檔根目錄,您的**相關** XPath表達式就可以了。你也可以使用這個絕對錶達式:`/ config:Manifest/config:Text [@config:name ='siteowner']`。如果這導致一個空的節點集合,請檢查您的名稱空間URI綁定是否正確。 – 2010-12-03 15:22:18

+0

yip清單是根源感謝 – Pintac 2010-12-06 06:48:44

回答

4

代碼中的問題是工廠不支持命名空間。還有另外一個線程解決此問題,How to use XPath on xml docs having default namespace

建議你嘗試這樣的事情,

的XPath的XPath = XPathFactory.newInstance()newXPath()。 xPath.setNamespaceContext(new MyNamespaceContext());

0

不是100%肯定,但我相信你需要在你XPath語句的前面令牌:

我會嘗試以下方法:

$這種/配置:清單/配置:文本[@config:名稱= 'siteowner']

如果不行試試這個:

/配置:清單/配置:文本[@config:名稱= 'siteowner']

如果沒有這些工作的嘗試:

// config:Manifest/config:Text [@config:name ='siteowner']