php 使用 DOMDocument 按类名获取所有元素

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/15184641/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 08:44:01  来源:igfitidea点击:

Get all elements by class name using DOMDocument

phphtml-parsingdomdocument

提问by Sammy

This question seems to have been answered numerous times but i still cant seem to put the pieces together.

这个问题似乎已经回答了很多次,但我似乎仍然无法将这些碎片拼凑在一起。

I would like to get node value of every class by name. for example

我想按名称获取每个类的节点值。例如

<td class="thename"><strong>32</strong></td>
<td class="thename"><strong>12</strong></td>

i would like to grab the 32 and the 12. I assume this requires for sort of for loop but not sure exactly how to go about implementing it. Here's what i have so far

我想获取 32 和 12。我认为这需要某种 for 循环,但不确定如何实现它。这是我到目前为止所拥有的

$domain = "http://domain.com";
$dom = new DOMDocument();

$dom->loadHTMLFile($domain);
$xpath = new DomXpath($dom);
$div = $xpath->query('//*[@class="thename"]')->item(0);
$stuff = $div ->textContent;

echo($stuff);

回答by user2112300

Is this what your are looking for?

这是您要找的吗?

    $result = array();

    $doc = <<< HTML
    <html>
        <body>
            <div>1
                <span>2</span>
            </div>
            <div>3</div>
            <div>4
                <span class="class1"><strong>5</strong></span>
                <span class="class1"><strong>6</strong></span>
                <span>7</span>
            </div>
        </body>
    </html>
HTML;
    $classname = "class1";
    $domdocument = new DOMDocument();
    $domdocument->loadHTML($doc);
    $a = new DOMXPath($domdocument);
    $spans = $a->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");

    for ($i = $spans->length - 1; $i > -1; $i--) {
        $result[] = $spans->item($i)->firstChild->nodeValue;
    }

    echo "<pre>";
    print_r($result);
    exit();

回答by Naveed Khan

i simply did this in php

我只是在 php 中做了这个

$dom = new DOMDocument('1.0');
           $classname = "product-name";

           @$dom->loadHTMLFile("http://shophive.com/".$query);
           $nodes = array();
           $nodes = $dom->getElementsByTagName("div");
           foreach ($nodes as $element)
           {
               $classy = $element->getAttribute("class");
               if (strpos($classy, "product") !== false)
               {
                       echo $classy;
                       echo '<br>';
               }

           }