phpでDOM操作に挑戦中です。
$dom = new DOMDocument(); $dom->loadHTML($content); $divs = $dom->getElementsByTagName('div'); foreach ($divs as $div): if ($div->hasAttribute('class') && preg_match('/target-class/i', $div->getAttribute('class'))) { ---- } endforeach; $dom->saveHTML();
$contentは
<div class="target-class">hogehoge</div> <div class="no">hogehoge</div> <div class="target-class">hogehoge</div> <div class="target-class">hogehoge</div> <div class="no">hogehoge</div> <div class="target-class">hogehoge</div> <div class="no">hogehoge</div> <div class="no">hogehoge</div> <div class="target-class">hogehoge</div> ```です。 $contentの内容を ```ここに言語を入力 <p class="target-class"><span class="target-class-inner">hogehoge</span></p> <div class="no">hogehoge</div> <p class="target-class"><span class="target-class-inner">hogehoge</span></p> <div class="target-class">hogehoge</div> <div class="no">hogehoge</div> <p class="target-class"><span class="target-class-inner">hogehoge</span></p> <div class="no">hogehoge</div> <div class="no">hogehoge</div> <p class="target-class"><span class="target-class-inner">hogehoge</span></p> ```みたいな形にするにはどうしたらいいでしょうか? 単純にdivタグを別のタグ名にしたいのです。 ### 現在実行している方法 ```ここに言語を入力 $dom = new DOMDocument(); $dom->loadHTML($content); $divs = $dom->getElementsByTagName('div'); foreach ($divs as $div): if ($div->hasAttribute('class') && preg_match('/target-class/i', $div->getAttribute('class'))) { $new_p = $dom->createElement('p'); // 属性を全部コピー foreach ($div->attributes as $attr) { $new_p->setAttribute($attr->nodeName, $attr->nodeValue); } $new_p_content = $div->nodeValue; $new_p->nodeValue = "<span class=\"target-class-inner\">{$new_p_content}</span>"; $div->parentNode->replaceChild($new_p, $div); } endforeach; return mb_convert_encoding($dom->saveHTML(), 'UTF-8', 'HTML-ENTITIES');
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/30 00:44