计算PHP中第一个子节点中指定的标记数


Count the Number of Specified Tags in the First Child Node in PHP

要计算包括嵌套标签在内的指定标签的数量,很简单,

<?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标记,如何实现呢?我的意思是,在这种情况下,应该只有一个,而不是四个。

也许删除其他标签并计数?或者有更好的方法吗?

问题是getElementsByTagName()返回所有祖先元素(带有指定的标记名),而不仅仅是子元素。

你可以采取几种不同的方法,这里有两种。

循环子节点并计数<li>元素

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

使用XPath只查询(并计数)子<li>元素

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

资源

  • childNodes属性
  • nodeName属性
  • DOMXPath
  • count() XPath函数

尝试以下操作:

$doc = new DOMDocument;
$doc->loadHTML($html);
foreach($doc->getElementsByTagName('ul') as $ul) {
   $count = $ul->getElementsByTagName('li')->length;
   break;
}