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

是否删除PHP中除第一个之外的所有列表元素?,php,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> <

如何删除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>
它将打印未过滤的html代码…

请尝试:

$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);
}
$dom=新的DOMDocument;
$dom->loadHtml('
  • {嵌套子元素}
  • {嵌套子元素}
  • {嵌套子元素}
'); $xpath=newdomxpath($dom); foreach($xpath->query('//li[position()>1]')作为$liNode){ $liNode->parentNode->removeChild($liNode); } $output=''; foreach($xpath->query('//body/*')作为$child){ $output.=$dom->saveXml($child); }
输出:

<div id="category">
   <ul class="products">
     <li>{nested child elements}</li>


   </ul>
</div>

  • {嵌套子元素}

您可以使用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);
}

我希望它是在PHP中…您是否以编程方式生成此输出?此html通过PHP进行响应?或者你在脚本中阅读了这个页面?你是如何用PHP生成这个html的??你的代码?好吧,如果你已经使用一个脚本来生成HTML,为什么不调整它或者参数化它呢?没有必要生成太多,然后使用DOM解析器将其删除…@jilseego在我给出的示例中,它可以工作。如果它对您不起作用,那么您可能会从格式不正确的html开始。请提供您的数据的更详细信息/示例。@Yhoshi:ul有兄弟节点,这会影响查询吗?@jilseego否。xpath查询
//li
仅选择给定文档中的每个li节点。使用
[position()>1]
这将仅限于那些不是其父项下第一个子项的项。你能更新你的问题以包含html吗?这段代码不适用于html吗?@Yoshi:我已经更新了我的问题。我没有生成html代码的代码。但当我使用print_r检查它时,它返回的几乎就是这个结果。@jilseego尝试更新的代码。我只是猜测一下,
$content
不包含格式良好的html(例如只有一个根节点)。更改后的代码使用
loadHtml
来适应这种情况。
<div id="category">
   <ul class="products">
     <li>{nested child elements}</li>


   </ul>
</div>
$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);
}