前回の質問が、適切な方法ではなかったかもしれないため、少しポイントを絞って改めてご質問させていただきます。
以下のような方法で、要素ノードについて、特定の属性ノードを処理したいと考えております。
ここで要素ノードの中には、どこくらい深くchildNodesが存在するかは分からず、それを再帰的に処理したいと考えております。
// foreach全体を再帰的に以下と同様の処理をしたい
が該当の箇所でchildNodes
がNULLになるまで繰り返したいのですが、どのように対応するのか想像できず、アドバイスを頂ければ幸いです。
よろしくお願い申し上げます。
php
1$data = <<EOM 2<div id="wrapper" onclick="**"> 3<img src="data:xxx"> 4<p style="background:black" class="hoge">abcde 5<span>fghi</span> 6</p> 7</div> 8EOM; 9 10$white_attr=["class","style","src"]; 11$dom = new DOMDocument(); 12$dom -> loadHTML($data); 13$item = $dom->getElementById('wrapper')->childNodes; 14 15 foreach ($item as $key) { 16 if(!is_null($key->childNodes)){ 17 // foreach全体を再帰的に以下と同様の処理をしたい 18 } 19 foreach ($key->attributes as $attrs) { 20 if(in_array($white_attr[0],$attrs->name,true)){ 21 $name = $attrs->name; 22 $nvalue = $attrs->nodeValue; 23 $key->removeAttribute('*');//特定のattr以外は全て削除 24 $key->setAttribute($name,$nvalue); 25 } 26 } 27 }
回答2件
あなたの回答
tips
プレビュー