2010-12-19 19 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> 

私はちょうど.の代わりにtext()を選択Lorem ipsum dolor sit amet.ではなくEditor's DescriptionLast updated: Lorem ipsum dolor sit amet.

答えて

34

提供されたXML do文章:

<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つの子ノードがあります。これら4つのうちの最初の3つはです。text-node子供たちはwhitespace-onlyです。これら4つのうちの最後の子どもたちが欲しいものです。

使用

/div/text()[last()] 

これは異なる:

/div/text() 

whitespace-onlyノードはXMLパーサーによって保存されているかどうかに依存して)後者の可能性のあるすべての4つのテキストノードを選択しますしかし、彼らの最後のものだけが必要です。

代替は(あなたが欲しいどのtext-nodeを正確に知っていないとき)です:

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

これはwhitespace-onlyテキストノードではありません/divのすべてtext-node-childrenを選択します。

+0

@Dimitre、質問は*子ノードなしでテキストを選択することです。これは最初の提案ではありません。 – Lucero

+0

@ルセロ:なぜですか?私は 'descendant ::'軸や '//'の省略形の使用を提案していません。最初の式はただ一つのテキストノード、すなわち '/ div'の最後の子テキストノードを選択します。代わりに空白だけではない '/ div'の子テキストノードを選択します。 –

+2

@Dimitre、単純に何も必要なテキストが最後のノードになると言っていないからですか? – Lucero

13

をしたい:指定されたXMLフラグメントで

div/text() 

、これが返されます。

Lorem ipsum dolor sit amet. 
+0

woa、明らかにxDありがとう、bajillion =) – Moak

0

これはどう:$ドキュメントを想定し
$doc/node()[3]/text()
は、XMLを持っています。

関連する問題