В php парсерах не стоит полагаться на DOMXPath и сторонние библиотеки

При парсинге на php я использую исключительно методы DOMDocument, либо, если не требуется большого количества данных и какой-то сложной выборки элементов, иногда достаточно обойтись регулярками — они работают быстрее. Недавно отказался от xpath, когда обнаружил интересную особенность — делаю правильный xpath запрос к явно существующему элементу и получаю дулю — возвращался «пустой объект». Вернее, объект DOMNodeList был не пустым, он имел свойство length, но вот при переборе этого объекта его DOMNode не имели свойств nodeValue, textContent и канонизировать его узлы методом DOMNode::C14N тоже не получилось — этого метода у нод не было. Вот такой вот «неполноценный» DOMNodeList возвратил мне xpath. А при использовании метода getElementsByTagName и переборе тех же самых элементов, у нод всё оказалось нормально — все свойства и методы были на месте. Вот такая особенность.

Вот поэтому сторонние библиотеки типа phpQuery и класс DOMXPath лучше не использовать. Да, не так элегантно, как с xpath, код получается несколько длиннее, но надёжнее.

Аналогичный код с использованием xpath запроса гораздо короче: