PHP でサイトマップ用の XML を作ろうとしていて、DOMElement に setAttribute() を実行したら以下のエラーが出たので原因をメモしておきます。
Uncaught exception 'DOMException' with message 'No Modification Allowed Error'
変更が許可されていないらしいです。以下がエラーが出た時のコードです。
$xmlDoc = new DOMDocument("1.0", "UTF-8");
$urlsetElem = new DOMElement("urlset");
$urlsetElem->setAttribute( 'xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9' );
$xmlDoc->appendChild( $urlsetElem );
どうやら、DOMElement の setAttribute() は親のドキュメントに紐づいていないと変更が許可されないらしいので、以下のように変更しました。
$xmlDoc = new DOMDocument("1.0", "UTF-8");
$urlsetElem = new DOMElement("urlset");
$xmlDoc->appendChild( $urlsetElem );
$urlsetElem->setAttribute( 'xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9' );
これでエラーは出なくなりました。変更許可がない、だけじゃなくて、変更許可がなくなる要因も教えてくれていたら、神エラーメッセージでした。