2010-12-19 44 views
33

如何在不選擇子節點中的文本的情況下檢索節點中的文本?直接在節點中選擇文本,而不是在子節點中

<div id="comment"> 
    <div class="title">Editor's Description</div> 
    <div class="changed">Last updated: </div> 
    <br class="clear"> 
    Lorem ipsum dolor sit amet. 
</div> 

換句話說,我想Lorem ipsum dolor sit amet.而不是Editor's DescriptionLast updated: Lorem ipsum dolor sit amet.

回答

34

在提供的XML中cument:

<div id="comment"> 
     <div class="title">Editor's Description</div> 
     <div class="changed">Last updated: </div> 
     <br class="clear"> 
     Lorem ipsum dolor sit amet. 
</div> 

頂級元素/div有一個是文本節點4級孩子的節點。這四個text-node孩子中的前三個是whitespace-only。這些4 text-node孩子中的最後一個是被通緝的。

使用

/div/text()[last()] 

這不同於

/div/text() 

後者可以(取決於是否whitespace-only節點由XML解析器保存)選擇所有4個文本節點,但你只需要最後一個。

另一種方法是(當你不正是你想要的text-node知道):

/div/text()[normalize-space()] 

這將選擇的/div不在whitespace-only文本節點的所有text-node-children

+0

@Dimitre,問題是選擇沒有* child *節點的文本,您的第一個建議不會這樣做。 – Lucero 2010-12-19 17:08:55

+0

@Lucero:爲什麼?我沒有建議使用'descendant ::'軸或''''縮寫。第一個表達式只選擇一個文本節點:'/ div'的最後一個子文本節點。替代選擇不是隻有空白的'/ div'的任何子文本節點。 – 2010-12-19 17:14:17

+2

@Dimitre,只是因爲沒有說明想要的文本將會是最後一個節點? – Lucero 2010-12-19 17:16:46

13

只要選擇text()而不是.

div/text() 

在給定的XML片段,這將返回:

Lorem ipsum dolor sit amet. 
+0

woa,這是顯而易見的xD感謝bajillion =) – Moak 2010-12-19 17:04:00

0

如何:
$doc/node()[3]/text()
假設$文檔具有XML。

相關問題