0

ネストされたタグを含む指定されたタグの数を数えるには、次のように簡単です。

<?php
$html = <<<STR
    <ul>
        <li>item1</li>
        <ul>
            <li>item2</li>
            <li>item3</li>
            <li>item4</li>
        </ul>
    </ul>
STR;
$doc = new DOMDocument;
$doc->loadHTML( $html );
$nodeUl->getElementsByTagName('ul')->item(0);
echo $nodeUl->getElementsByTagName('li')->length;
?>

しかし、この場合、最初の子ノードでのみliタグをカウントしたい場合、どのようにそれを達成できますか?つまり、この場合、4つではなく1つだけにする必要があります。

たぶん他のタグを削除して数えますか?それともそれを行うためのより良い方法はありますか?

4

2 に答える 2

1

次のことを試してください。

$doc = new DOMDocument;
$doc->loadHTML($html);

foreach($doc->getElementsByTagName('ul') as $ul) {
   $count = $ul->getElementsByTagName('li')->length;
   break;
}
于 2012-08-25T15:08:20.773 に答える
1

問題は、getElementsByTagName()子だけでなく、すべての祖先要素(指定されたタグ名を持つ)を返すことです。

あなたが取ることができるいくつかの異なるアプローチがあります、ここにそれらのうちの2つがあります。

子ノードをループして<li>要素をカウントします

$count = 0;
foreach ($nodeUl->childNodes as $child) {
    if ($child->nodeName === 'li') {
        $count++;
    }
}

<li>XPathを使用して、子要素のみを照会(およびカウント)します

$xpath = new DOMXPath($doc);
$count = $xpath->evaluate('count(li)', $nodeUl);

資力

于 2012-08-25T15:14:35.983 に答える