1

私はRubyとXpathを初めて使用します。次のテーブルからシステム機能を抽出する必要があります。

http://h10010.www1.hp.com/wwpc/ie/en/ho/WF06b/321957-321957-3329742-89318-89318-5186820-5231694.html?dnr=1

これまでのところ、すべてのtdタグをターゲットにしようとしましたが、ページはCSS IDを使用していないため、そのようにターゲットにすることはできません。

次のコードを試しました

doc.xpath('//tr/th/span[normalize-space(text())="System features"]/..')

しかし、それは何も返しません;(

誰かがこれにアプローチするための最良の方法を知っていますか?

4

1 に答える 1

0

その式は特定のソースで正常に機能するはずですが、実際には慣用的ではありません。あなたはおそらくこのようなものを使いたいでしょう:

//tr/th[span[normalize-space()='System features']
  1. normalize-space文字列引数が必要です。によって返されたノードセットを渡すとtext()、ドキュメント順に最初のテキストノードを取得して文字列に強制的に変換されます。子テキストノードは1つしかないため、これはドキュメントでは実際には重要ではありませんが、これが起こっていることに注意する必要があります。
  2. /..式の最後でを使用してツリーをバックトラックする必要はありません。spanネストされた述語を使用して子の存在をテストし、それによって目的の述語をth直接選択できます。

thターゲットに子ノードが1つしかないという事実を利用したい場合はspan、次の簡略化された式を記述できます。

//tr/th[normalize-space(span)='System features']

では、なぜ機能しないのですか?わかりにくいですが、ドキュメントの解析に使用しているツールが、リテラルソースでの表示とは異なる構造を作成していることが原因である可能性があります(たとえば、入力が実際には整形式のXMLではないため)。少し異なる表現を試してください:

//*[span[@class='themebody' and normalize-space()='System features']]

または、最初に自分自身を取得できることを確認しspanてから、そこから式を作成する必要があります。

//span[@class='themebody' and normalize-space()='System features']
于 2012-07-14T01:19:21.837 に答える