2

私は比喩的な穴にはまっているので、おそらく私がやっていることよりも良い方法があるでしょう。

特定のノードの下にあるいくつかのノードを取得したいと考えています。私はこの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」フィルターを提唱する投稿をいくつか見つけました。最終仕様にしました。:(

4

1 に答える 1

0

as での検索//pは明示的に再帰的です。それが望ましくない場合は、そうしないでください。:)

p興味のある の直下にあるのみが必要であるdivが、それdivが階層内のどこにでもある場合、これは次のように表現されます。

//div[@class='interesting']/p

p...検索対象となるツリー内の場所の直下にあるのみが必要な場合は、さらに簡単です。

./p
于 2012-05-09T19:15:06.610 に答える