dongqianzong4275 2013-08-27 21:21
浏览 102
已采纳

操纵PHP domdocument字符串

I want to remove the element tag in my domdocument html.

I have something like

this is the <a href='#'>test link</a> here and <a href='#'>there</a>.

I want to change my html to

this is the test link here and there.

My code

 $dom = new DomDocument();
 $dom->loadHTML($html);
 $atags=$dom->getElementsByTagName('a');

 foreach($atags as $atag){
     $value = $atag->nodeValue;
//I can get the test link and there value but I don't know how to remove the a tag.                              
     }

Thanks for the help!

  • 写回答

2条回答 默认 最新

  • duan1443 2013-08-27 21:29
    关注

    You are looking for a method called DOMNode::replaceChild().

    To make use of that you need to create a DOMText of the $value (DOMDocument::createTextNode()) and also getElementsByTagName return a self-updating list, so when you replace the first element and then you go to the second, there is no second any longer, there is only one a element left.

    Instead you need a while on the first item:

    $atags = $dom->getElementsByTagName('a');
    while ($atag = $atags->item(0))
    {
        $node = $dom->createTextNode($atag->nodeValue);
        $atag->parentNode->replaceChild($node, $atag);
    }
    

    Something along those lines should do it.

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

报告相同问题?

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题