下記のようにDomを操作してparentNodeから見て、子ノードの指定のitem($key)を削除しようとしているのですが、削除するノードの指定まではうまくいくのですが、 $key_node->parentNode->removeChild($remove_node);
でエラーが発生し実装することができません。
removeChild自体の使い方は正しいように思えるのですが、どこかコードに間違いがあるのでしょうか?
※in_arrayでwhit_tagにあれば削除のように実際にはブラックリストのように使用しているように見えますが、現在は試しに反対方向にコードを書いているため、そこはご放念ください。実際のコードでは!in_array
で否定します。
php
1//main.php 2require_once("function.php"); 3 4 $data = '<div id="wrapper"> 5 <img src="data:sssss" onclick="ss"> 6 <p style="background:#fff000" class="hoge"> 7 <span data="111" id="222">abcde</span> 8 <script><span>ss</span></script> 9 </p> 10 </div>'; 11 12$dom = new DOMDocument(); 13 $dom -> loadHTML($data); 14 $item = $dom->getElementById('wrapper')->childNodes;
php
1//function.php 2//--------------------------------------------------------------------------------------------------------// 3$white_tag=["p","span","strong","i","u","s","blockquote","sub","sup","ul","ol","li","hr",'div','figure','oembed','img']; 4$white_attr=["class","style",'src']; 5//--------------------------------------------------------------------------------------------------------// 6 7function recursive_tag ($node){ 8 global $white_tag; 9 10 foreach ($node as $key => $key_node) { 11 $tag_name = $key_node->tagName; 12 if(in_array($tag_name,$white_tag,true)){ 13 $remove_node = $key_node->parentNode->childNodes->item($key);//ここまではうまくいく 14 var_dump($remove_node); 15 $key_node->parentNode->removeChild($remove_node);//ここがうまくいかない 16 17 } 18 19 } 20} 21//--------------------------------------------------------------------------------------------------------//
追記
php
1Warning: DOMDocument::loadHTML(): Unexpected end tag : span in Entity, line: 5 in /Applications/MAMP/htdocs/textile/dist/main.php on line 39 2 3Notice: Undefined property: DOMText::$tagName in /Applications/MAMP/htdocs/textile/dist/function.php on line 24
回答2件
あなたの回答
tips
プレビュー