是否删除PHP中除第一个之外的所有列表元素?
如何删除PHP中除第一个以外的所有li元素是否删除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> <
<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);
}