2011-08-16 62 views
0

我想用我的應用程序中使用dom4j的XSD架構時接到了XPath表達式空,我下面的XML文件走近解析一個問題:使用與dom4j的

<menu xmlns="http://example.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://example.com/ my-schema.xsd"> 
     <content> 
      <caption>aaa</caption> 
      <description>vvvv</description> 
     </content> 
</menu> 

我初始化dom4j中的解析器,現在我試圖檢索描述節點:

Node node = document.selectSingleNode("/menu/content/description"); 

(我知道我可以使用迭代器,但XPath的我更合適)

我有null代替描述節點。

當我試圖找出什麼是錯的,我刪除架構聲明從XML(因此,只有樸素簡單<menu>開頭),然後將其工作完全正常

我寧願有那個xsd聲明,所以我做錯了什麼?

在此先感謝!

回答

0

xpath失敗的原因是它不支持名稱空間。

試試這個:

/*[local-name()='menu' and namespace-uri()='http://example.com/']/*[local-name()='content' and namespace-uri()='http://example.com/']/*[local-name()='description' and namespace-uri()='http://example.com/'] 

更妙的是,下載DanSharp XML查看器,你可以生成自己這些路徑。

http://www.bizbert.com/bizbert/2007/11/25/DanSharp+XmlViewer.aspx

+0

我最終使用'XSI:no​​NamespaceSchemaLocation'但你的回答讓我意識到,這是命名空間的問題,這樣的感謝! – Gosia

+0

當您從沒有命名空間的模式導入類型時,使用noNamespaceSchemaLocation。這通常是不正確的做法,因爲我認爲您使用的XSD具有名稱空間。所以你真正應該做的是保持你的xmlns完整的XML實例,並依靠絕對的xpath查詢。 –