Как парсить теги по очереди?

Есть xpath такого вида:
filterXPath('//p|//img|//blockquote|//ul|//li|//strong|//b|//i')

И вот проблема есть блок <blockquote> в котором и <strong>, и , тем самым парсит весь текст из трех сразу.
То есть:
[0] => Текст из цитаты вместе с жирным и параграфом
[1] => Жирный из blockquote
[2] => Параграф из blockquote

Тексты дублируются. Но под цитатой тоже есть теги параграфа и жирного, то есть убрать из xpath теги strong, p тоже нельзя. Можно ли как-то брать , который не в blockquote?
  • Вопрос задан
  • 220 просмотров
Решения вопроса 1
@Roman-Fov
Тут или указывать точно, что нужно (со всякими грязными трюками):

XML
<div>
	<p>par</p>
	<strong>strong</strong>
	<divd>
		<p>divpar</p>
	</divd>
	<blockquote>
		<p>bqpar <strong>bqparstrong</strong></p>
	</blockquote>
</div>

XPath
//p[name(ancestor::blockquote[1]) != 'blockquote']|//strong[name(ancestor::blockquote[1]) != 'blockquote']|//blockquote

Result
Element='<p>par</p>'
Element='<strong>strong</strong>'
Element='<p>divpar</p>'
Element='<blockquote><p>bqpar <strong>bqparstrong</strong></p></blockquote>'


или перестать злоупотреблять двойными слешами
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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