その特定のドキュメントは 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
いる要素と一致しません。p
http://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']
トリックを使用する必要があります。