Я пытаюсь использовать XPath в PHP, и я получаю слишком много элементов. Это мой код:PHP XPath возвращает слишком много элементов
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.
Дальнейшие исследования показывают, что это тот же самый элемент, который был найден семь раз.
Что происходит?
Edit: источник файла 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 в семь раз.
Можете ли вы опубликовать короткий фрагмент XML, который демонстрирует ошибку? – ircmaxell
Этот «тот же самый элемент» найден в 7 разных местах в документе XML? –
И каковы другие 7 результатов, которые он нашел, что «не должно быть»? – ircmaxell