XPATH - как выделить эту часть текста? - PullRequest
4 голосов
/ 22 марта 2012

код на странице:

<div class='container'> 
<p>
    <b>Address:</b> Some address<br />
    <b>Phone:</b> phone1, phone2<br />
    <b>E-mail: </b><a href='mailto:somemail' >somemail</a><br />
    <b>Site:</b><a href='somesite'>somesite</a>
</p>    
</div>

Мне нужно выбрать текст после </b> и до <br />, используя XPATH. В этом случае мне нужно получить «некоторый адрес» или «phone1, phone2» и т. Д.

'Некоторый адрес' должен быть в $ var1 'phone1, phone2' в $ var2

Я пытался с .//*[@class="container"]/p/text()[1] это не сработало.

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

Попробуйте это

/div[@class="container"]/p/descendant-or-self::text()[
    not(ancestor::b) 
    and normalize-space(.) != ""
]

Это выберет текстовые узлы в дереве элементов P (элемента div с атрибутом класса «контейнер»), которые не находятся в дереве элементов B или не пусты, например, это даст вам

  • "Какой-то адрес",
  • "phone1, phone2",
  • "Somemail" и
  • "somesite".

Демо

Также посмотрите этот учебник XPath .

0 голосов
/ 22 марта 2012

Ближайшее, чего я могу достичь:

'//div[@class="container"]/p/text()[preceding::b[contains(text(),"Address")] and following-sibling::b[contains(text(),"Phone")]]'

ИЛИ, как предложил @ Гордон

 '//div[@class="container"]/p/text()[following::b[contains(text(),"Phone")] and normalize-space(.)!=""]'

:)

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