Xpath Получить текст между HTML тегами

319
07 августа 2017, 10:00

Есть html со следующей структурой

<div class="text"> 
  <h1>Headerh1</h1> 
    Text1 <br/> after header1  
  <h3>Headerh3.1</h3>  
    Text2 <br/> after header3.1  
  <h3>Headerh3.2</h3> 
    Text3 <br/> after header3.2  
  <h3>Headerh3.3</h3> 
    Text4 <br/> after header3.3  
 </div>

Как получить текст Text1 after header1?

div[@class='text']/text()[count(preceding-sibling::h1)=1] - возвращает текст после всех тегов.

Найден вариант //div[@class='text']/h3[1]/preceding-sibling::text(), хотелось бы более гибкое решение.

Answer 1

Если структура постоянная и, как вы отметили, <br/> может встречаться сколько угодно раз, попробуйте получать текст после h1 и до h3, как результат комбинации двух запросов

//div[@class='text']/h1/following-sibling::text()[1]
//div[@class='text']/h3/preceding-sibling::text()[1]

Или объединить (вдруг текст будет между <br>)

//div[@class='text']/h1/following-sibling::text()[not(preceding-sibling::h3)]
Answer 2

Первая строка "Text1"

//div[@class='text']/h1/following-sibling::text()[1]

Вторая строка "after header1"

//div[@class='text']/h1/following-sibling::text()[2]

После этого сделайте конкатенацию строк.

Либо, что-то подобное:

//text()[preceding::*[contains(text(),'Headerh1')] and following::*[contains(text(),'Headerh3.1')] and not(contains(., 'Term:'))]
READ ALSO
Почему textarea в android меняет свой размер?

Почему textarea в android меняет свой размер?

Только начинаю печатать в поле, как сразу поле увеличивается в размере по вертикалиИ это происходит только на андроиде (на iphone не проверял)

300
Растолкуйте за Partial и Render в ASP.NET MVC?

Растолкуйте за Partial и Render в ASP.NET MVC?

Начал изучать aspnet mvc по книге Адама Фримена и столкнулся с частичными представлениями, так вот есть

339
Долгое обращение к методу

Долгое обращение к методу

Доброго времени суток

570
С# (Новичок) 2 строки переписать в 1ну

С# (Новичок) 2 строки переписать в 1ну

С# Всем привет!) Есть строки вводимые пользователем (с одинак-м кол-м символов и только цифры без пробелов)

282