簡體   English   中英

PHP DOMXPath無法獲取從通用html類解析的彼此相關的內容

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

我正在使用php DOMXPath解析html頁面,並試圖從與類信息中的nodeValue對應的類標簽中獲取nodeValue。

<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

為何會發生這種情況仍然很有意義,因為查詢是獨立的,它們的輸出是一個類中所有來自類標簽的內容,而另一個是類信息中的所有內容。

有沒有更好的方法來進行查詢,或者有什么更好的方法來輸出可以解決問題的內容?

您需要使用外部元數據 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM