douruoshen1449 2015-11-25 19:41
浏览 54
已采纳

DOMXpath和PHP:如何在<ul>中包含一堆<li>

I have a html-document with this not-so-nice markup, without the 'ul':

<p>Lorem</p>
<p>Ipsum...</p>
<li class='item'>...</li>
<li class='item'>...</li>
<li class='item'>...</li>
<div>...</div>

I am now trying to "grab" all li-elements and wrap them inside an ul-list which I'd like to place in the same spot, using PHP and DOMXPath. I manage to find and "remove" the li-elements:

$elements =  $xpath->query('//li[@class="item"]');

$wrapper = $document->createElement('ul');
foreach($elements as $child) {
    $wrapper->appendChild($child);
}
  • 写回答

2条回答 默认 最新

  • dousi7579 2015-11-25 21:35
    关注

    Maybe you can get the parentNode of the first <li> and then use the insertBefore method:

    $html = <<<HTML
    <p>Lorem</p>
    <p>Ipsum...</p>
    <li class='item'>...</li>
    <li class='item'>...</li>
    <li class='item'>...</li>
    <div>...</div>
    HTML;
    $doc = new DOMDocument();
    $doc->loadHTML($html);
    
    $xpath = new DOMXpath($doc);
    
    $elements = $xpath->query('//li[@class="item"]');
    
    $wrapper = $doc->createElement('ul');
    $elements->item(0)->parentNode->insertBefore(
        $wrapper, $elements->item(0)
    );
    
    foreach($elements as $child) {
        $wrapper->appendChild($child);
    }
    
    echo $doc->saveHTML();
    

    Demo

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误