我正在尝试解析一些超文本标记语言,但有一些DOMXPath查询功能的问题。我希望我的代码找到所有带有类"container“的div,然后在每个div中找到带有类"name”的div。在http://php.net/manual/en/domxpath.query.php上,我读到您可以为XPath查询函数指定上下文节点,以便仅在确定节点内进行搜索,但在我的示例中,它似乎没有任何作用。
这可能是因为$person是DOMElement类型的对象,而XPath查询接受DOMNode作为上下文节点。但据我所知,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
https://stackoverflow.com/questions/50778108
复制相似问题