2011-03-11 80 views
1

我怎樣才能選擇不是在div標籤中的文本?使用xpath選擇所有不在div元素中的文本?

例如。

<div> 
    <div>not this</div> 
    1<br/> 
    <div>not this</div> 
    1<br/> 
    1<br/> 
    <div>not this</div> 
</div> 
<div> 
    <div>not this</div> 
    2 
    <div>not this</div> 
    2 
    2 
    <div>not this</div> 
</div> 
<div> 
    <div>not this</div> 
    3 
    <div>not this</div> 
    3 
    3 
    <div>not this</div> 
</div> 

結果:{ '1/N1/N1/N', '2 2 2', '3 3 3'}

+0

你的意思不是在二級'div'嗎?你發佈的所有內容都在'div' –

+0

道歉,不是在二級div。謝謝! – Pete

+0

好問題,+1。查看我的答案,獲得完整,簡短且簡單的單行XPath表達式,可以精確選擇所需的節點。 :) –

回答

0
//text()[normalize-space()][../node()[not(self::text())]] 

含義任何不空白字符僅文本節點具有至少一個兄弟節點

0

使用

div/text()[string-length(normalize-space()) > 0] 

當使用提供的XML片段的父級作爲上下文節點進行評估時,此表達式將選擇上下文節點的任何div子級的所​​有非空白空間的文本節點子級。

這裏是完整的驗證

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 

<xsl:template match="/*"> 
    <xsl:for-each select= 
    "div/text()[string-length(normalize-space()) > 0]"> 
    "<xsl:value-of select="."/>" 
    <xsl:text>&#xA;</xsl:text> 
    </xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 

當這個變換所提供的XML片段(包裹在頂部元件成爲良好的XML文檔)施加:

<t> 
    <div> 
     <div>not this</div> 
     1<br/> 
     <div>not this</div> 
     1<br/> 
     1<br/> 
     <div>not this</div></div> 
    <div> 
     <div>not this</div> 
     2  
     <div>not this</div> 
     2 
     2   
     <div>not this</div></div> 
    <div> 
     <div>not this</div> 
     3  
     <div>not this</div> 
     3 
     3   
     <div>not this</div></div> 
</t> 

想要的,產生正確的結果:

" 
     1" 


    " 
     1" 


    " 
     1" 


    " 
     2  
     " 


    " 
     2 
     2   
     " 


    " 
     3  
     " 


    " 
     3 
     3   
     "