2012-04-22 11 views
9

XHTMLが貧弱です。xpathを解析する必要があります。ネストされた要素にtext()が含まれていても空白がない場合は

<div class="foo"> 
    i need this text 
    <br/> 
    <br/> 
    <span>sometext</span> 
</div> 

<div class="foo"> 
    <span>some other text</span> 
    <span>sometext</span> 
</div> 

最初のdivに「このテキストが必要です」という内容をすべて選択したいとします。私の問題は、div要素に空白やその他のものが含まれていることです。つまり、// div [@ class = "foo"]/text()は2番目のdivの空の文字列も返します。私はこれらの空欄を無視したいのですが、どうすればいいですか?

+0

は、クエリのヘルプの最後に[!正規化空間を()= ""]を追加するようなものをやっていますか? – Steve

答えて

13

使用は:

//div 
    [.//text() 
     [normalize-space() = 'i need this text'] 
    ] 
    //text()[normalize-space()] 

これは、文書内の任意divの任意の非空白のみのテキストノードの子孫を選択し、それが(div)は正規化された文字列の値であるテキストノードの子孫を有します文字列"i need this text"。 ( - 引数が指定されていない場合、コンテキストノードの文字列値)、そこからすべての先頭と末尾の空白文字が削除された別の文字列、および任意の内部グループのを産生

normalize-space()関数は、文字列を取り隣接する空白文字は1つのスペースで置き換えられます。

-1

は、このセレクタを試してみてください:

//span[@class='glyphicon glyphicon-list mr5']/..[contains(normalize-space(text()),'Applications')]

+0

テキストを追加してください。 –

関連する問題