10

xpath で解析する必要がある貧弱な XHTML があります。次のようになります。

<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 にも空の文字列を返すことです。これらの空のフィールドを無視したいのですが、どうすればできますか?

4

2 に答える 2

19

使用:

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

これにより、正規化された文字列値が string である text-node 子孫を持つdiv、ドキュメント内のいずれかの非空白のみのテキスト ノード子孫が選択されます。div"i need this text"

このnormalize-space()関数は文字列 (コンテキスト ノードの文字列値 -- 引数が指定されていない場合) を取り、そこから別の文字列を生成します。この文字列では、先頭と末尾の空白文字がすべて削除され、隣接する空白文字の内部グループがシングルスペース。

于 2012-04-23T01:30:51.113 に答える
-1

このセレクターを試してください:

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

于 2015-10-30T07:53:41.240 に答える