0

<a>を使用してタグ付きのdivを見つけることができることを知っています

'//div[a]'

<a>しかし、タグとタグの両方を持つ div が必要な場合はどうでしょう<p>

やってみ'//div[a][p]'ました。

私はまた、どちらかまたはタグで'//div[a|p]'div を与えると思ったものを試してみました。それから、それがと後で含まれているかどうかを確認できました...しかし、返された div には が含まれていません。 .<a><p><div><a><p><p><a><div>

4

2 に答える 2

2

およびを<div>として持つ要素(直接の子孫)のみを選択する場合、XPath 式は正しく、問題は別の場所にあります。<a><p>

とを含む<div>要素を選択する場合は、代わりに軸を使用する必要があります。 <a><p>descendant

//div[descendant::a and descendant::p]

次のすべてを選択します<div>

<root>
  <div>
    <a>Dolor</a>
    <p>et calculum</p>
  </div>
  <div>
    <a>Dolor<p>et calculum</p></a>
  </div>
  <div>
    <ul>
      <li><a>Foo</a><li>
    </ul>
    <p>Bar</p>
  </div>
</root>
于 2013-02-05T23:09:59.073 に答える
1

もっと良い方法があると確信していますが、すぐにクラッジするのは次のようなものです:

set(tree.xpath('//div[a]')).intersection(tree.xpath('//div[p]'))

または、プレーンな XPath を維持するこの怪物:

tree.xpath('//div[a][count(. | //div[p]) = count(//div[p])]')

XPath 2.0 を使用した場合lxml- 交差演算子がありますが、残念ながら...

于 2013-02-05T23:08:09.943 に答える