2013-11-02 14 views
3

比方說,我有一個看起來像這樣的XML:選擇CDATA內容什麼的XPath當一些孩子的存在

<a> 
    <b> 
    <![CDATA[some text]]> 
    <c>xxx</c> 
    <d>yyy</d> 
    </b> 
</a> 

我不能找到一個辦法讓「一些文本」。任何想法?

如果我使用「A/B」返回也xxx和YYY 如果我使用「A/B /文()」它沒有返回

回答

3

你不能真正選擇CDATA節:CDATA只是告訴解析器,以避免進行反向轉義特殊字符的方式,和你輸入的文檔看起來XPath的完全一樣:

<a> 
    <b> 
    some text 
    <c>xxx</c> 
    <d>yyy</d> 
    </b> 
</a> 

(有說,如果你使用DOM,那麼一些DOM XPath引擎無法正確實現規範,並將CDATA內容視爲CDATA部分之外的文本中的單獨文本節點)。

XPath表達式a/b/text()應該選擇三個文本節點,其中第一個包含「一些文本」以及周圍的空白。

+0

好吧,所以基本上它看起來像任何原因的文本( )當CDATA是內部節點的一部分並且不返回任何內容時有點困惑。看起來像處理這個問題的唯一正確方法(並且在任何xpath引擎上都是健壯的)是添加一個特定的節點來包含CDATA部分,然後...... Thx! – DaveG

0

隨着XPath數據模擬路徑/a/b/text()[1]應選擇具有字符串值

一些文字

這是一個換行符,一些空間,然後換行和一些空間文本some text文本節點。

+0

好吧......我不確定孩子的順序是必然知道的,所以我不能確定CDATA部分在第一位... – DaveG