Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

php - Get all elements by class name using DOMDocument

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

$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);
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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();

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...