Задать вопрос
@fanat_96

Как получить текст за пределами тега при помощи xpath?

Здравствуйте. Есть такой html-фрагмент
<article class="eText">
<p class="">
<b class="">Год:</b> 2019-2020 
<br class="">
<b class="">Жанр:</b> Приключения, фэнтези, мультсериал 
<br class="">
<b class="">Перевод / Озвучивание:</b> Многоголосый дубляж от Wakanim 
<br class="">
<b class="">Время:</b> 22 х ~ 00:24:00 
<br class="">
<b class="">Произведено:</b> Япония, CloverWorks 
<br class="">
<b class="">Режиссер:</b> Тосифуми Акай 
<br class="">
<b class="">Актеры:</b> Нобунага Симадзаки, Риэ Такахаси, Аяко Кавасуми, Кэнъити Судзумура, Маая Сакамото, Томокадзу Сэки, Ю Кобаяси, Такахиро Сакурай, Ю Асакава, Кана Уэда 
</p>
</article>


Запрос, который получился у меня, только доходит до нужного узла. А вот получить значение за пределами тега я не знаю как.
//article[@class='eText']/p/b[contains(.,'Жанр:')]

Мне нужно получить значения, идущие после закрывающих тегов b. Т.е. "2019-2020", "Многоголосый дубляж от Wakanim", "Тосифуми Акай" и все остальные.

Я, конечно, могу при помощи Substring извлечь подстроку после двоеточия и проблема будет решена, но мне стало интересно можно ли написать универсальный xpath-запрос, в котором будет меняться содержимое contains, чтобы получить эти текстовые значения.
  • Вопрос задан
  • 603 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
@Roman-Fov
можно ли написать универсальный xpath-запрос, в котором будет меняться содержимое contains, чтобы получить эти текстовые значения.


Короткий ответ
//article[@class='eText']/p/b[. = 'Жанр:']/following-sibling::text()[1]

Xml:
<article class="eText">
	<p class="">
		<b class="">Жанр:</b>вфывафыва
		<b class="">Время:</b> 22 х ~ 00:24:00 
	</p>
</article>

XPath result:
Text='вфывафыва'
-----------------------------------

Правильный ответ
//article[@class='eText']/p/b[text() = 'Жанр:'][generate-id(following-sibling::text()[1]/preceding-sibling::node()[1]) = generate-id(.)]/normalize-space(following-sibling::text()[1])

Xml:
<article class="eText">
	<p class="">
		<b class="">Жанр:</b><b class="">Жанр:</b>Многоголосый дубляж от Wakanim 
		<b class="">Время:</b> 22 х ~ 00:24:00 
	</p>
</article>

XPath result:
String='Многоголосый дубляж от Wakanim'
-----------------------------------
(Тип учитывать возможное пустое значение после тега <b>. Незн насколько наглядно проиллюстрировал)

Если что не понятно, то спрашивайте

PS: Вопрос знатокам: реально ли упростить второй вариант без потери функционала?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы