1

ページのテキスト コンテンツのみを対象とするように xpath を設定しようとしていますが、記事の「著者について」の下のセクションが引き続き含まれています。記事のテキストとタイトルのみを対象とする xpath が必要です。

これまでの私のxpath:

//*[@class="content"]//p[not(contains(@id, "author-bio"))] |
//*[@id="content_wrapper"]//h1

これは機能しますが、期待どおりに著者セクションについてを削除しません。私は以下の記事に取り組んでいます。

http://www.intomobile.com/2013/11/05/samsung-galaxy-s3-android-43-update-rolling-out-international-users/

firefox/firebug への firepath 拡張機能を使用しています。これにより、ターゲットにしている要素を表示できます。

4

2 に答える 2

1

その特定のドキュメントは XHTML であり、そのルート要素は

<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"
xmlns:og="http://opengraphprotocol.org/schema/"
xmlns:fb="http://www.facebook.com/2008/fbml">

xmlns="..."html要素 (およびプレフィックスのないすべての子孫) がhttp://www.w3.org/1999/xhtml名前空間にあることを意味します。現在、XPath 式の接頭辞が付けられていない名前は、名前空間にないノードを参照するため、

//p[not(contains(@id, "author-bio"))]

名前空間で名前が付けられていない要素を探しており、名前空間で名前が付けられてpいる要素と一致しません。phttp://www.w3.org/1999/xhtml

正しいアプローチは、プレフィックスをその名前空間 URI にマップし、XPath 式でプレフィックスを使用することです。

//xhtml:p[not(contains(@id, "author-bio"))]

ただし、プレフィックス マッピングを正確に定義する方法は、使用している XPath エンジンによって異なります。ツールがプレフィックス マッピングを行う方法を提供しない場合はlocal-name()、たとえば、で述語を使用する必要があります。

//*[local-name() = 'p'][not(contains(@id, "author-bio"))]

同じことが にも当てはまります。h1プレフィックスをバインドして使用するか、*[local-name() = 'h1']トリックを使用する必要があります。

于 2013-11-07T12:10:44.937 に答える
0

id('home_right_column')//p[not(祖先:: [@id= 'author-bio'])] | // [@id="content_wrapper"]//h1

自分でそれを手に入れました:)

于 2013-11-08T12:12:05.847 に答える