1

たくさんの html があり、xpath 経由で処理したいと考えています。テキストが発生する可能性のある方法は 2 つあります。

<div>
  The Text
</div>
<!-- OR -->
<div>
  <span>The Text</span>
</div>
<!-- BUT NOT -->
<div> other text
  <span>The Text</span>
</div> other text

単一の xpath 式で「The Text」を取得する方法はありますか?

編集:

具体的な構造:

<div id="content">
<h1>...</h1>
<div>
    ...
</div>
<div>
    <span>The Text</span>
</div>

コンテンツノードを取得して//div[@id='content'][1]、他の目的に再利用しています。このコンテキスト ノードで、 を実行しようとしまし./div[2]/span/text() | ./div[not(span)][2]/text()た。スパンがない場合は機能しますが、スポーンがある場合は空白/null を返します。Java xpath 実装を使用しています。div は常に content-node の 2 番目のものです。

4

1 に答える 1

1
div/span/text() | div[not(span)]/text()

トリックを行う必要があります。これにより、 の子であるテキスト ノード<span>( が存在する場合<span>) と、 が存在しない場合の の子であるテキスト ノードが選択され<div>ます<span>

divXPath 式を評価するコンテキストを反映するように、パーツを変更する必要があります。<div>ドキュメント内のすべての要素でこれを行う場合は、 に変更div//divます。

アップデート:

投稿した新しいコンテキスト情報に基づいて、上記の XPath を次のように変更する必要があります。

./div[2]/span/text() | ./div[2][not(span)]/text()

<span>ただし、要素があるときにバージョンがテキストを返さない理由がわかりません。XPathを評価しているJavaコードなど、より多くのコンテキストを提供できますか。入力 HTML のより詳細なスニペットでしょうか。サンプル入力 HTML は実際の入力を正確に表していますか? </div>見過ごされている別のものがそこにあるのでしょうか?

于 2013-07-29T13:29:07.730 に答える