Я пытаюсь разобрать некоторый HTML, но у меня есть некоторые проблемы с функцией запроса DOMXPath.Я хочу, чтобы мой код находил все div с классом «контейнер», а затем в каждом из них находил div с классом «name».На http://php.net/manual/en/domxpath.query.php я прочитал, что вы можете указать contextnode для функции запроса XPath для поиска только внутри certian узла, но в моем случае это, похоже, ничего не делает.
Это может быть связано с тем, что $ person является объектом типа DOMElement, а запрос XPath принимает DOMNode в качестве contextnode.Но, как я понимаю, DOMElement расширяет DOMNode, так что это не должно быть проблемой.Также я не получаю никаких ошибок или предупреждений.
Я использую PHP версии 5.5.12.
Это мой код:
<pre>
<?php
$html = '
<div class="junk">...</div>
<div class="container">
<div class="name">Kdksf</div>
<div class="surname">Gskdl</div>
<div class="junk">...</div>
</div>
<div class="container">
<div>
<div>
<div class="name">Rada</div>
<div class="surname">Ldsa</div>
</div>
</div>
<div class="junk">...</div>
</div>
<div class="container">
<div class="name">Sdfex</div>
<div class="surname">Fdss</div>
<div class="junk">...</div>
</div>
<div class="junk">...</div>
';
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$persons = $xpath->query("//*[contains(@class, 'container')]");
foreach ($persons as $person) {
$name = $xpath->query("//*[contains(@class, 'name')]", $person);
print_r($name->item(0)->textContent);
echo "<hr>";
}
?>
Ожидаемый результат:
Kdksf
Rada
Sdfex
Но я получаю:
Kdksf
Kdksf
Kdksf