私は比喩的な穴にはまっているので、おそらく私がやっていることよりも良い方法があるでしょう。
特定のノードの下にあるいくつかのノードを取得したいと考えています。私はこのXPath式を思いつきました:
>>> content_tags = 'h1 h2 h3 h4 h5 h6 p ol ul dl table'.split()
>>> content_xpath = './/*[%s]' % ' or '.join('self::%s' % i for i in content_tags)
>>> content_xpath
'.//*[self::h1 or self::h2 or self::h3 or self::h4 or self::h5 or
self::h6 or self::p or self::ol or self::ul or self::dl or
self::table]'
リストされた content_tags のいずれかが必要な階層の最上位になる可能性があり、同じレベルまたはそれ以上のレベルにある可能性のある他の要素を無視したいと考えています。残念ながら、 aまたは aの<p>
内側、
または a の内側などがある場合があり、外側の要素とは別の結果として内側の要素を取得します。私が見つけたノード内にネストされている可能性のあるノードを無視するために「カット」を実行する良い方法はありますか? または、私が何とか見逃しているこれを行うためのより良い方法はありますか?<ul>
<table>
<table>
<ol>
これが私が解析しようとしているものの例です。
<div class="interesting">
<img src="ignore-this.jpg"/>
<h1>I want this.</h1>
<p>I want this, too.</p>
<div class="sidebar">
<ul>
<li><p>I only want one copy of this, inside the UL.</p></li>
<li><p>Ditto.</p></li>
</ul>
</div>
</div>
ありがとう!
ところで、w3.org メーリング リストで、「dont-include- any-descendant-or-self」フィルターを提唱する投稿をいくつか見つけました。最終仕様にしました。:(