Как использовать XPATH, чтобы найти элемент в документе HTMl? - PullRequest
1 голос
/ 08 апреля 2019

У меня есть следующий фрагмент в HTML-документе:

<div class="prompt input_prompt xh-highlight">
   <bdi class="">In</bdi>
   "&nbsp;[&nbsp;]:"
</div>

чтобы найти такие случаи (я имею в виду выражение [ ]:), я попробовал следующие идеи, но ни одна из них не сработала:

//div/bdi/parent::*/text()="&nbsp;[&nbsp;]:"
//div/bdi/parent::*[contains(text(), " ")]
//div/bdi/parent::*[contains(text(), "&nbsp;")]
//div[contains(text(), "&nbsp;[&nbsp;]:")]
//div[contains(text(), "[ ]")]
//div[contains(text(), "[&nbsp;]")]
//div[contains(text(), "\u00a0]:")]

Как это сделать правильно?

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

В самой XPath единственный способ представить символ xA0 в строковом литерале - это сам по себе;так что вы можете искать //div[contains(., "[§]")], где § символ xA0.Конечно, недостатком этого является то, что вашим читателям не очевидно, что рассматриваемый символ является xA0, а не обычным пробелом.

XPath часто встроен в язык хоста, и язык хоста вполне может обеспечитьальтернативный способ написать этот символ.Например, если язык хоста основан на XML (например, XSLT), тогда вы можете написать его как &#xa0;, а если это Javascript, вы можете написать его как \u00a0.

Так что путь кНапишите выражение в зависимости от вашего языка соглашения.

0 голосов
/ 08 апреля 2019

Это работает правильно:

Вы ищете все элементы, которые соответствуют следующему xpath выражению:

//div/bdi/parent::*[contains(text(), "]:")]

Затем вы перебираете их и получаете их текст, который вы легко можете сравнить в логике и надлежащем языке, например, python:

for element in elements:
    if '[ ]' in element.text:
        # some code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...