XPath: как выбрать элемент на основе значения элемента того же уровня непосредственно перед ним? - PullRequest
1 голос
/ 02 апреля 2019

Я извлекаю данные из некоторых html-страниц, используя Python и Xpath, и столкнулся с небольшой проблемой.

Рассмотрим следующий пример HTML:

<tbody>
    <tr>
        <th>Author</th>
    </tr>
    <tr>
        <td>Dan Brown</td>
    </tr>
    <tr>
        <th>Genre</th>
    </tr>
    <tr>
        <td>Educational</td>
    </tr>
</tbody>

Каквыбрать данные автора или данные жанра?Я не могу использовать фиксированные позиции списка (например, tr [2]), потому что значения не всегда там.Например, если у книги нет автора, tr [2] внезапно станет жанром (при условии, что у него есть жанр).

Надеюсь, мой вопрос ясен:)

1 Ответ

1 голос
/ 02 апреля 2019

Простым способом было бы применить следующие выражения XPath-1.0:

/tbody/tr[th/text()='Author']/following-sibling::tr/td/text()

для выбора Dan Brown и

/tbody/tr[th/text()='Genre']/following-sibling::tr/td/text()

для выбора Educational.
ЕслиПри необходимости вы можете добавить к выражениям /.

Если эти выражения действительно соответствуют , ожидаемый результат зависит от структуры вашего (не общего) XML-файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...