首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >parameter查询似乎忽略了DOMXPath参数

parameter查询似乎忽略了DOMXPath参数
EN

Stack Overflow用户
提问于 2018-06-10 04:09:08
回答 2查看 131关注 0票数 0

我正在尝试解析一些超文本标记语言,但有一些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。

这是我的代码:

代码语言:javascript
运行
复制
<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>";
}

?>

预期输出为:

代码语言:javascript
运行
复制
Kdksf
Rada
Sdfex

但我得到了:

代码语言:javascript
运行
复制
Kdksf
Kdksf
Kdksf
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50778108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档