использование xpath для выбора элемента после другого

Я видел подобные вопросы, но решения, которые я видел, не будут работать над следующим. Я далек от эксперта XPath. Мне просто нужно разобрать HTML. Как я могу выбрать таблицу, которая следует за заголовком 2. Я думал, что мое решение ниже должно работать, но, видимо, нет. Кто-нибудь может мне помочь?

content = """<div>
<p><b>Header 1</b></p>
<p><b>Header 2</b><br></p>
<table>
<tr>
    <td>Something</td>
</tr>
</table>
</div>
"""

from lxml import etree
tree = etree.HTML(content)
tree.xpath("//table/following::p/b[text()='Header 2']")

2 ответов


вам нужно использовать ниже XPATH 1.0 С помощью топора preceding.

 //table[preceding::p[1]/b[.='Header 2']]

некоторые альтернативы ответу @Arup:

tree.xpath("//p[b='Header 2']/following-sibling::table[1]")

выбрать первые table брат после p содержащий b заголовок, содержащий Заголовок "2"

tree.xpath("//b[.='Header 2']/following::table[1]")

выбрать первые table в порядке документа после b содержащий "Заголовок 2"

посмотреть спецификации спецификации XPath 1.0 для деталей на различных осях:

  • на после оси содержит все узлы в том же документе, что и узел контекста, которые находятся после узла контекста в порядке документа, исключая любые потомки и исключая узлы атрибутов и узлы пространства имен

  • на следующий-брат ось содержит всех следующих братьев и сестер контекстного узла; если контекстный узел является узлом атрибута или узлом пространства имен, следующая ось-sibling пуста