如何删除除PHP中第一个以外的所有li元素?
<div class="category">
<ul class="products">
<li>{nested child elements}</li>
<li>{nested child elements}</li>
<li>{nested child elements}</li>
</ul>
</div>
上面的代码是由另一个脚本通过函数生成的。
结果应该是这样的:
<div class="category">
<ul class="products">
<li>{nested child elements}</li>
</ul>
</div>
更新:抱歉,“类别”是一个不是ID的类。
为了偿还Yoshi,ul。产品有兄弟姐妹,但我没有将它们包括在我的帖子中。这会影响查询吗?
这是我的代码在添加Yoshi代码时的样子:
class Myclass {
function prin_html() {
$content = get_code();
$dom = new DOMDocument;
$dom->loadXml($content);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//li[position()>1]') as $liNode) {
$liNode->parentNode->removeChild($liNode);
}
echo $dom->saveXml($dom->documentElement);
}
}
它会打印未经过滤的html代码......
答案 0 :(得分:9)
尝试:
$dom = new DOMDocument;
$dom->loadHtml('<div id="category">
<ul class="products">
<li>{nested child elements}</li>
<li>{nested child elements}</li>
<li>{nested child elements}</li>
</ul>
</div>');
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//li[position()>1]') as $liNode) {
$liNode->parentNode->removeChild($liNode);
}
$output = '';
foreach ($xpath->query('//body/*') as $child) {
$output .= $dom->saveXml($child);
}
输出:
<div id="category">
<ul class="products">
<li>{nested child elements}</li>
</ul>
</div>
答案 1 :(得分:2)
您可以使用DOMDocument。
$dom = new DOMDocument;
$dom->loadHTML($html);
$ul = $dom->getElementById('category')->getElementsByTagName('ul')->item(0);
foreach($ul->getElementsByTagName('li') as $index => $li) {
if ($index == 0) {
continue;
}
$ul->removeChild($li);
}