PHPのXML操作で、すでにあるXMLの置換をしたいと思っています。
$doc=DOMDocument::load('test.xml');
$hoge=$doc->getElementsByTagName('hoge')->item(0)->firstChild;
$hoge->replaceData(0,1000,$_POST['hogehoge']);
このような感じで置換はできるのですが、
中身が空の場合は置換できずにエラーになってしまいます。
単純にappendDataやinsertDataにすればいいのかと思ったのですが
それでもエラーになってしまいます。
こういう場合はどういう対処をすればいいのでしょうか?
そもそも空というのがあるのはいけないのでしょうか・・・?
どうぞよろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
そりゃあ,ない時は$hogeはnullだから当然だわな。
http://www.w3.org/TR/DOM-Level-3-Core/core.html# …
通常こういう場合,
textContentプロパティから
文字列を取ってきて(テキストノードがない時は空文字列が返る)
http://www.w3.org/TR/DOM-Level-3-Core/core.html# …
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だったら空文字列のテキストノードを追加してみた。
#俺はこういう回避策的なコード好きじゃないんだよなあ…。
#ま、参考までに
*/
?>
ってなコード書いたけどさ
こんなに時間がたってしまって申し訳ないのですが・・・
無事、解決できました!
遅くなってすみません(^^;)
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- AJAX 自作の地図をグーグルマップのようにしたい 3 2022/11/15 11:53
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- その他(プログラミング・Web制作) pythonのcondaコマンドの仕様について 2 2022/06/24 00:13
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- Access(アクセス) Accessで、『"A"以外の場合"--"に置き換える』という作業をしたいのですが、良い方法はありま 1 2022/06/07 19:30
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- その他(IT・Webサービス) 見たことのない形式で日付が表示されているのでそれを解析してほしい 3 2023/01/23 16:53
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
PHP、ヒアドキュメント内でのIF...
-
可変変数にアロー演算子を使いたい
-
ASPのResponse.WriteをPHPでは...
-
VBA 繰り返し。。。
-
エラーの理由が分りません。Pri...
-
配列の操作時にLNK2001外部シン...
-
正規表現 ファイル名の取得
-
UNIX CP "で上書きしません"
-
IIS5.1で「規定のドキュメント...
-
VB6のコンボボックスのテキスト...
-
Dosブロンプトでtabを出力したい
-
wordの差し込み印刷で文字...
-
DTOとEntityの差は何ですか。
-
shシェルスクリプト 空白行の...
-
findstrのerrorlevel
-
DMMの動画を全件取得したのです...
-
Yahoo! JAPAN IDを新規取得でき...
-
「取得先」という表現について
-
phpでcookieがうまく保存されない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Let's Encryptで自動更新がされ...
-
VBA コレクションに2次元配列...
-
VB.NETからVBAマクロ(引数)を呼...
-
エラーの理由が分りません。Pri...
-
PHP、ヒアドキュメント内でのIF...
-
PHPでの画像の形式の変換
-
CSVファイルをブラウザのキャッ...
-
可変変数にアロー演算子を使いたい
-
次のhtml・cssでspan内の文字を...
-
VB.NETSystem.Xml 要素数を得る...
-
どういうプログラムを関数化を...
-
ExcelVBAで部分一致(*)をしたい
-
PHPの変数値をリンクさせたい
-
file_existsが動作しない
-
protectedなのにアクセスできな...
-
PHPプログラム上で「URLを直接...
-
ASPのResponse.WriteをPHPでは...
-
PHPでXMLの置換 replaceData
-
[C#]Arraylistに追加した構造体...
-
[C++]std:mapの扱いを教えて頂...
おすすめ情報