Python 通过XPath选择给定类型的第一组连续子元素

Python 通过XPath选择给定类型的第一组连续子元素,python,xml,xpath,Python,Xml,Xpath,我认为最好用一个例子来说明这个问题。让我们假设以下输入: <div id='content'> <h1></h1> <h3></h3> <p>a</p> <p>b</p> <p>c</p> <div><p>x</p></div> <p>d</p&

我认为最好用一个例子来说明这个问题。让我们假设以下输入:

<div id='content'>
    <h1></h1>
    <h3></h3>
    <p>a</p>
    <p>b</p>
    <p>c</p>
    <div><p>x</p></div>
    <p>d</p>
    <h2></h2>
    <p>e</p>
</div>

虽然我想知道是否有更“惯用”的解决方案来解决这个问题,但它似乎或多或少起作用了。

这看起来是惯用的w.r.t XPath
from lxml import etree

tree = etree.fromstring(r'''
    <div id='content'>
        <h1></h1>
        <h3></h3>
        <p>a</p>
        <p>b</p>
        <p>c</p>
        <div><p>x</p></div>
        <p>d</p>
        <h2></h2>
        <p>e</p>
    </div>
''')

q=r'''
    /div[@id="content"]/p[count(preceding-sibling::*[not(self::p)]) 
    =
    count(/div[@id="content"]/p[1]/preceding-sibling::*)]
'''
for el in tree.xpath(q):
    print(el.text)