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

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()返回所有祖先元素(具有指定的标签名称),而不仅仅是子元素。

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

遍历子节点并计算<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);

资源

于 2012-08-25T15:14:35.983 回答