その式は特定のソースで正常に機能するはずですが、実際には慣用的ではありません。あなたはおそらくこのようなものを使いたいでしょう:
//tr/th[span[normalize-space()='System features']
normalize-space
文字列引数が必要です。によって返されたノードセットを渡すとtext()
、ドキュメント順に最初のテキストノードを取得して文字列に強制的に変換されます。子テキストノードは1つしかないため、これはドキュメントでは実際には重要ではありませんが、これが起こっていることに注意する必要があります。
/..
式の最後でを使用してツリーをバックトラックする必要はありません。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']