如何使用 foreach 循环获取所有内容,除了那些在简单 html dom.php 中有一些 class 的内容

How to get all the contents with foreach loop except for those having some class in simple html dom.php

假设我有这样的代码:

 <div class="container">
        <span class="toshow">item1</span>
        <span class="toshow">item2</span>
        <span class="toshow">item3</span>
        <span class="show">item4</span>
        <span class="notshow">item4</span>
        <span class="notshow">item5</span>
        <span class="another">item5</span>
        <span class="another">item5</span>
    </div>

现在我只想显示具有 class“toshow”但不包括“notshow”的项目:

<?php
foreach($html->find('div[class="container"]') as $element)
echo $elemtnt->plaintext.'<br>';
?>

此外,我已尝试排除具有 class“notshow”的跨度:

<?php
foreach($html->find('div[class="container"] span[class! = "notshow"]') as $element)
echo $elemtnt->plaintext.'<br>';
?>

如何使用foreach循环显示所有项目? simple_html_dom.php

如果你使用 DOMXpath,你可以这样做:

    $xdoc = new DomDocument;
$xdoc->loadHTMLFile("xxxx");
$xpath = new DOMXpath($xdoc);
$xpath->query(".//*[contains(@class,'toshow')]");

或不显示

$xpath->query(".//*[not(contains(@class,'notshow'))]");

要查找带有 class“toshow”的所有跨度,您可以使用 div[class="container"] span[class="toshow"]

例如

foreach($html->find('div[class="container"] span[class=toshow]') as $element) {
    echo $element->plaintext . PHP_EOL;
}

输出

item1
item2
item3

或显示 class 不是 notshow

的所有跨度
foreach($html->find('div[class="container"] span[class!=notshow]') as $element) {
    echo $element->plaintext . PHP_EOL;
}

输出

item1
item2
item3
item4
item5
item5