PHP DOMXPath 无法从泛型中解析彼此相关的内容 html 类

PHP DOMXPath Can't get content related to each other parsed from generic html classes

我正在用 php DOMXPath 解析一个 html 页面,我试图从 class 标签中获取与 class 信息中的节点值相对应的节点值.

<h3>
    <div class="metadata">
        <span class="label">Another Label</span>
        <span class="info">
            <a href="some-link.com">Link Name</a>
        </span>
    </div>
</h3>
<h3>
    <div class="metadata">
        <span class="label">Some Label</span>
        <span class="info">
            <a href="some-link.com">Link Name</a>, 
            <a href="another-link.com">Another Link Name</a>, 
            <a href="yet-another-link.com">Yet Another Link Name</a>
        </span>
    </div>
</h3>

我正在通过以下方式访问内容:

$label = $xpathLabel->query("//h3/div/span[@class='label']");
$info = $xpathInfo->query("//h3/div/span[@class='info']/a");

并输出:

foreach ($labels as $label) {
    print "{$label->nodeValue}\n";
    foreach($infos as $info){
        print "\t{$info->nodeValue}\n";
    }
}

输出:

Another Label
    Link Name
    Link Name
    Another Link Name
    Yet Another Link Name
Some Label
   Link Name
   Link Name
   Another Link Name
   Yet Another Link Name

为什么会发生这种情况仍然是有道理的,因为查询是独立的,并且它们的输出是一个中来自 class 标签的所有内容,另一个是 class 信息中的所有内容。

是否有更好的查询方式或更好的输出内容的方式来解决问题?

您需要使用外部 元数据 div 作为循环的锚点,然后列出该元素内的标签和信息链接:

$metadata = $xpathLabel->query("//h3/div[@class='metadata']");

foreach ($metadata as $group) {
    $labels = $xpathLabel->query("./span[@class='label']", $group);

    foreach ($labels as $label) {
        print "{$label->nodeValue}\n";
    }

    $infos = $xpathLabel->query("./span[@class='info']/a", $group);

    foreach($infos as $info){
        print "\t{$info->nodeValue}\n";
    }
}

<div> 元素用作 DOMXpath::query$contextnode 参数,仅搜索当前元素的子元素。

有关完整示例,请参阅 https://eval.in/955491