- ベストアンサー
PHPでXMLの置換方法について
- PHPのXML操作で、すでにあるXMLの置換をしたいと思っています。
- 中身が空の場合は置換できずにエラーになってしまいます。単純にappendDataやinsertDataにすればいいのかと思ったのですが、それでもエラーになってしまいます。
- 空というのがある場合の対処方法や、それが問題なのかについてご教示いただきたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
そりゃあ,ない時は$hogeはnullだから当然だわな。 http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-169727388 通常こういう場合, textContentプロパティから 文字列を取ってきて(テキストノードがない時は空文字列が返る) http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent str_replace関数 http://jp2.php.net/str_replace を通して textContentプロパティに代入しなおす。 んだろうと思う。 ============= メモ だけど,手元のPHP 6.0 200807280630で 自分のコード(ファイル作るのが面倒だったのでloadXMLメソッド使用)でtextContentプロパティに代入後にそのプロパティを参照してprintすると代入した値になっていませんでしたorz DOMElementのドキュメントにもtextContentプロパティはない #なのに未定義エラーが出ない。 ##ナイトリーでリリースではないからかもしれないのが。 http://jp2.php.net/manual/en/class.domelement.php ので回避策として <?php $doc=new DOMDocument(); $doc->loadxml("<hoge>aaa</hoge>"); /* 個人的なこといえばルート要素は$doc->documentElementから取得したい そうでなくてもXPathの方が(準備も使用法も引数が多くて大変だけど)好き */ $hogeElement = $doc->getElementsByTagName('hoge')->item(0); $text = $hogeElement->firstChild; if ($text === null){ $text = $hogeElement->appendChild($doc->createTextNode("")); } $text->replaceData(0,1000,"bbb"); print $doc->saveXML(); /* nullだったら空文字列のテキストノードを追加してみた。 #俺はこういう回避策的なコード好きじゃないんだよなあ…。 #ま、参考までに */ ?> ってなコード書いたけどさ
お礼
こんなに時間がたってしまって申し訳ないのですが・・・ 無事、解決できました! 遅くなってすみません(^^;) ありがとうございました!