Ваш входной документ неправильно сформирован, >
отсутствует для </p
, а один div
не закрыт должным образом. С фиксированным входным документом выражение рабочего пути составляет
Выражение XPath
//div[@class='content']//text()[not(ancestor::div/@class[contains(., 'code')])][normalize-space()]
Выбирает все текстовые узлы, но только если они не имеют предка div
элемент с атрибутом class
, значение которого содержит «код», а также выбранные текстовые узлы не могут быть только пробелами.
Вывод
Отдельный результаты разделяются ------
:
title
-----------------------
text
-----------------------
text2
-----------------------
text3
-----------------------
text4
-----------------------
text5
-----------------------
text6
-----------------------
text7
-----------------------
text8
Обновление
Я пытался с вашим ответом. Это работает, однако мне все еще нужен источник из тега img. Как мне это получить?
Можно также выбрать атрибут source
элемента img
, но это сделает выражение Xpath еще более сложным. Вам нужно просто добавить еще одну строку PHP, чтобы оценить отдельное выражение пути, например:
//div[@class='entry-content']/p/img/@source
Обновление 2
Хотя я абсолютно не рекомендую используйте это выражение (потому что оно запутывает ваш код), вот как можно объединить оба выражения в одно с оператором объединения:
//div[@class='entry-content']//text()[not(ancestor::div/@class[contains(., 'code')])][normalize-space()] | //div[@class='entry-content']//p/img/@src