PHPのDOMDocument::loadHTMLを使用してhtmlタグを編集しようとしています。htmlデータはhtmlの一部であり、ページ全体ではありません。このページ(PHP-DOMDocument-既存のHTMLタグを新しいものに変更/置換する必要がある)の内容に従いました。
これにより、preタグがdivタグに変換されますが、「致命的なエラー:キャッチされない例外'DOMException'とメッセージ'NotFoundError'」が表示されます。
<?php
$contents = <<<STR
<pre>hi</pre>
<pre>hello</pre>
<pre>bye</pre>
STR;
$dom = new DOMDocument;
@$dom->loadHTML($contents);
foreach( $dom->getElementsByTagName("pre") as $nodePre ) {
$nodeDiv = $dom->createElement("div", $nodePre->nodeValue);
$dom->replaceChild($nodeDiv, $nodePre);
}
echo $dom->saveHTML();
?>
[編集]ノードオブジェクトを逆方向に反復しようとすると、次のエラーが発生します。「注意:非オブジェクトのプロパティを取得しようとしています...」
<?php
$contents = <<<STR
<pre>hi</pre>
<pre>hello</pre>
<pre>bye</pre>
STR;
$dom = new DOMDocument;
@$dom->loadHTML($contents);
$domPre = $dom->getElementsByTagName('pre');
$length = $domPre->length;
For ($i = $length; $i > -1 ; $i--) {
$nodePre = $domPre->item($i);
echo $nodePre->nodeValue . '<br />';
// $nodeDiv = $dom->createElement("div", $nodePre->nodeValue);
// $dom->replaceChild($nodeDiv, $nodePre);
}
// echo $dom->saveHTML();
?>
[編集]オーケー、解決しました。回答されたコードにエラーがあるため、ここに解決策を投稿します。皆さんありがとう。
解決:
<?php
$contents = <<<STR
<pre>hi</pre>
<pre>hello</pre>
<pre>bye</pre>
STR;
$dom = new DOMDocument;
@$dom->loadHTML($contents);
$domPre = $dom->getElementsByTagName('pre');
$length = $domPre->length;
For ($i = $length - 1; $i > -1 ; $i--) {
$nodePre = $domPre->item($i);
$nodeDiv = $dom->createElement("div", $nodePre->nodeValue);
$nodePre->parentNode->replaceChild($nodeDiv, $nodePre);
}
echo $dom->saveHTML();
?>