65

私はこのHTMLを持っています:

 <tr class="even  expanded first>
   <td class="score-time status">
     <a href="/matches/2012/08/02/europe/uefa-cup/">

            16 : 00

     </a>
    </td>        
  </tr>

(16 : 00) 文字列を余分な空白なしで抽出したい。これは可能ですか?

4

5 に答える 5

142

I. 次の 1 つの XPath 式を使用します

translate(normalize-space(/tr/td/a), ' ', '')

説明:

  1. normalize-space()引数から新しい文字列を生成します。この文字列では、先頭または末尾の空白 (スペース、タブ、NL、または CR 文字) が削除され、中間の空白が単一の空白文字に置き換えられます。

  2. translate()によって生成された結果を受け取り、normalize-space()残りの中間スペースのそれぞれが空の文字列に置き換えられた新しい文字列を生成します。


Ⅱ.または:

translate(/tr/td/a, ' &#9;&#10;&#13', '')
于 2012-08-02T12:39:43.100 に答える
1
  • text() ノードが空かどうかを確認できます。

    /path/text()[not(.='')]

following-sibling:: のような軸でこれらがコンテナーでない場合、または child:: で役立つ場合があります。

  • string() または xpath 2 の regex() 関数を使用できます。

注: 一部のコメントは、xpath は文字列操作を実行できないと言っています...たとえそれが実際にはそのように設計されていなくても、contains()、starts-with()、replace() などの基本的なことを実行できます。

空白ノードをチェックしたい場合は、通常はノードリストの結果セットがあり、ほとんどの xpath 関数 (match や replace など) は 1 つのノードしか操作しないため、はるかに困難です。

  • ノードと文字列の操作を分離できます

したがって、xpath を使用してコンテナーまたはテキスト ノードのリストを取得し、それを別の言語で処理することができます。(java、php、python、perl など)。

于 2012-08-02T12:21:07.233 に答える