Я пытаюсь использовать XPath в PHP и получаю слишком много элементов. Это мой код:
libxml_use_internal_errors(true);
$document = new DOMDocument;
$document->strictErrorChecking = false;
$document->loadHTML($text);
$xpath = new DomXPath($document);
$placeholders = $xpath->query('//div[starts-with(@class, "waf-ph-")]');
print '$placeholders->length: ' . $placeholders->length;
Существует только ОДИН элемент, соответствующий запросу. Один. Ни одного больше. Но вот мой вывод:
$placeholders->length: 7
Я использую loadHTML, потому что у меня не будет полного контроля над вводом, когда я закончу кодирование, и я не могу гарантировать соответствие XHTML стандартам. Я собираюсь использовать Tidy, но пока стараюсь не полагаться на него. Но есть только ОДИН div, который соответствует XPath.
Дальнейшие исследования показывают, что это тот же самый элемент, который был найден семь раз.
Что происходит?
Редактировать: источником файла DOM является файл HTML, который где-то содержит следующее (это фиктивный адрес):
<div class="waf-ph-https\:\/\/aserver\.com\/apath\/app\.php5">
<p class="notification">This is to be substituted.</p>
</div>
Строка "waf-ph-" больше нигде не найдена в файле.
Edit:
Попытка сделать следующее:
foreach ($document->placeholders as $node) print $document->saveXML($node);
возвращает текст вышеуказанного DIV семь раз.