//div[@class='breadcrumbs']/text()
должен дать вам то, что вам нужно в этом случае - это выбрать набор всех текстовых узлов, которые находятся непосредственно под сухари дел. если вы хотите настроить таргетинг на один в конце (например, если есть более двух уровней навигационной цепочки, и есть еще один текстовый узел, скажем, косой между двумя a
элементами), то чуть более конкретно
//div[@class='breadcrumbs']/text()[last()]
может работать лучше.
Если это не сработает, есть еще две возможности, о которых я могу думать. Во-первых, HTML DOM использует верхний регистр для имен элементов, и поскольку XPath чувствителен к регистру, вы можете найти //DIV
вместо //div
. Или, возможно, проблема с пространством имен - если ваш документ имеет xmlns="..."
на корневом элементе, то это помещает ваши элементы div в пространство имен, а неподписанные имена в xpath относятся к узлам в пространстве имен no. Чтобы выбрать узлы с именами, вы должны привязать префикс к соответствующему URI пространства имен, а затем использовать префикс в своих выражениях (//xhtml:div
). Точно так же, как вы ориентируетесь на префиксы сопоставления, зависит от того, какую библиотеку/инструмент/язык вы используете для выполнения запросов xpath.
Может ли быть, что XHTML недействителен? «Сладости и конфеты» действительно должны быть «Сладости & Candy» –
В этом случае может быть, но это всего лишь пример. Существуют сотни других страниц без знака «&». Изменится пример! Приветствия. –