0

私はhtml文字列を持っています

html_string = '<div class="quote" post_id="48" 
style="border:1px solid #000;padding:15px;margin:15px;" user_id="1"
user_name="rashidfarooq">This is not True</div>

<div class="quote" post_id="49" style="border:1px 
solid #000;padding:15px;margin:15px;" user_id="1" 
user_name="rashidfarooq">This is good for me</div>

<div class="genuine" post_id="49" style="border:1px 
solid #000;padding:15px;margin:15px;" user_id="1" 
user_name="rashidfarooq">This is good for me</div>';

class name="quote" の div を数えたい 試してみた

    $dom = new DOMDocument;
    $dom->loadHTML($html_string);
    $divs = $dom->getElementsByTagName('div');
    $length = $divs->length;

しかし、$length は div の総数を示します。class name = "quote" を持つ div のみをカウントするにはどうすればよいですか。それを行うことができるPHPネイティブ関数はありますか。

4

2 に答える 2

2

そのためのネイティブなdomdocument関数はないようですが、自分で書くのは簡単です:

function getElementsByClassName($elements, $className) {
    $matches = array();
    foreach($elements as $element) {
        if (!$element->hasAttribute('class')) {
            continue;
        }
        $classes = preg_split('/\s+/', $element->getAttribute('class'));
        if ( ! in_array($className, $classes)) {
            continue;
        }
        $matches[] = $element;
    }
    return $matches;
}

$dom = new DOMDocument;
$dom->loadHTML($html_string);
$divs = getElementsByClassName($dom->getElementsByTagName('div'), 'quote');
$length = $divs->length;
于 2013-03-27T07:56:35.007 に答える
0

試してみてください

$DOMResponse = new \DOMDocument();
$DOMResponse->loadXML($data);
$xpath = new \DOMXPath($DOMResponse);
$length = $xpath->query('/*[@class="quote"]')->length; 

クエリするクラスはどこquoteですか

ノート

前に div もフィルタリングする場合は、前に div をクエリしてから、上記で提案したクエリを適用する必要があります

このようなもの

$length = $xpath->query('//div[@class="quote"]')->length;
于 2013-03-27T07:59:11.040 に答える