2

XPath を使用して選択する必要がある HTML テーブルがあります。テーブルには複数のクラスが含まれる場合と含まれない場合がありますが、特定のクラスを含むテーブルのみが必要です。

サンプルの HTML スニペットを次に示します。

<html>
  <body>
    <table class="no-border">
      <tr>
        <th colspan="2">Blah Blah Blah</th>
      </tr>
      <tr>
        <td>Content</td>
        <td>
          <table class="info no-border">
            <tr>
              <!-- Inner table content -->
            </tr>
          </table>
        </td>
      </tr>
    </table>
  </body>
</html>

class を含むテーブルのみを取得するには、XPath を使用する必要がありますinfo。を使用してみまし/html/body/table/tr/td/table[@class='info*']たが、うまくいきません。取得しようとしているテーブルは、HTML ドキュメントのどこにでも存在する可能性があります。技術的にはどこにも存在しませんが、外部テーブルと内部テーブルの間にさまざまなレベルの階層が存在する可能性があります。

誰かが私を正しい方向に向けることができれば、私は感謝しています.

4

4 に答える 4

5

あなたができる最も近いのは、contains関数を使うことです:

//table[contains(@class,'info')]

informationただし、これは class を持つテーブル、または部分文字列を持つその他のものをキャプチャすることに注意してくださいinfo。私の知る限り、XPath は単語全体の一致を区別できません。したがって、この可能性のある条件を確認するには、結果をフィルタリングする必要があります。

于 2013-08-24T16:06:12.140 に答える
1

理想的に必要なのは、のような CSS セレクターですtable.info。また、XML/HTML 解析用の一部の XPath エンジンとツールキットはこれらのセレクターをサポートしており、これらのセレクターは内部で XPath 式に変換されcssselectます。lxmlNokogiri

一般的に、XPath のように CSS セレクターをエミュレートするには、スペース文字と組み合わせtable.infoて使用​​するのが一般的なトリックまたはパターンです。あなたの場合、次のようになります。contains()concat()

.//table[contains(concat(' ', normalize-space(@class), ' '), ' info')]
于 2013-08-25T09:59:47.627 に答える