要计算包括嵌套标签在内的指定标签的数量,很简单,
<?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;
}