@Shimpanze

Как в xPath, при поиске, не учитывать пустые узлы?

Здравствуйте!

Необходимо найти все изображения, которые являются единственными элементами у своего родителя - ссылки.

Должен находить:

<a href="#"><img src="image.jpg" /></a>

<a href="#">    <img src="image.jpg" />    </a>

<a href="#">
  <img src="image.jpg" />
</a>


Не должен находить:

<a href="#">
  <img src="image.jpg" />
  <img src="image.jpg" />
</a>

<a href="#">
  <img src="image.jpg" />
  Изображение с изображением изображения
</a>

<a href="#"><img src="image.jpg" />Изображение с изображением изображения</a>


Вот это условие:

//a[count(node())=1][img]

...совпадает только с первым примером. Так как (что-то мне подсказывает) принимает пробелы за текстовый узел.

Вроде как, здесь надо использовать две функции: normalize-space() и concat(). Целый день уже мучаюсь - ничего не получается.

Спасибо!
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
@Roman-Fov
Всё просто если разбить на части

1. Посмотрим текстовое содержимое всех ссылок и отсечём те, что не пусты.
2. Посчитаем детей и оставим только элементы с одним ребёнком
3. Готово

XML
<root>
	<a href="#"><img src="image1.jpg" /></a>
	<a href="#">    <img src="image2.jpg" />    </a>
	<a href="#">
	  <img src="image3.jpg" />
	</a>
	<a href="#">
	  <img src="image4.jpg" />
	  <img src="image5.jpg" />
	</a>
	<a href="#">
	  <img src="image6.jpg" />
	  Изображение с изображением изображения
	</a>
	<a href="#"><img src="image7.jpg" />Изображение с изображением изображения</a>
</root>


XPath
/root/a[normalize-space(translate(., ' ', '')) = '' and count(*) = 1]/img


Result
Element='<img src="image1.jpg"/>'
Element='<img src="image2.jpg"/>'
Element='<img src="image3.jpg"/>'
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы