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

计算PHP中第一个子节点中指定标记的数量,php,html,count,domdocument,Php,Html,Count,Domdocument,要计算包含嵌套标记的指定标记的数量,很简单,如下所示 <?php $html = <<<STR <ul> <li>item1</li> <ul> <li>item2</li> <li>item3</li> <li>item4</li>

要计算包含嵌套标记的指定标记的数量,很简单,如下所示

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

也许去掉其他标签,然后数一数?或者有更好的方法吗?

尝试以下方法:

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

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

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

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

循环子节点并计算
  • 元素 使用XPath查询(并计数)唯一的子
  • 元素 资源
    • 财产
    • 财产
    • 阶级
    • XPath函数
    $count = 0;
    foreach ($nodeUl->childNodes as $child) {
        if ($child->nodeName === 'li') {
            $count++;
        }
    }
    
    $xpath = new DOMXPath($doc);
    $count = $xpath->evaluate('count(li)', $nodeUl);