删除除PHP中第一个以外的所有列表元素?

时间:2011-06-22 09:58:10

标签: php

如何删除除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代码......

2 个答案:

答案 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);
}