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ランキング
-
VB.NETからVBAマクロ(引数)を呼...
-
VBA コレクションに2次元配列...
-
UNIX CP "で上書きしません"
-
共用体のサイズをsizeofで
-
vb作成したらでbeep音が鳴りま...
-
ADODBで_convertObjectした結果...
-
htmlで変数の表示
-
構造体の入れ子が構造体の場合...
-
PHPランダム表示
-
PHPからバッチ実行
-
VB6のコンボボックスのテキスト...
-
number_formatが勝手に四捨五入
-
どういうプログラムを関数化を...
-
メール本文の構成 行頭空白
-
Dosブロンプトでtabを出力したい
-
wordの差し込み印刷で文字...
-
shシェルスクリプト 空白行の...
-
switch()文で値の大小比較
-
DTOとEntityの差は何ですか。
-
「取得先」という表現について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
エラーの理由が分りません。Pri...
-
可変変数にアロー演算子を使いたい
-
VB.NETからVBAマクロ(引数)を呼...
-
PHP、ヒアドキュメント内でのIF...
-
VB.NETSystem.Xml 要素数を得る...
-
どういうプログラムを関数化を...
-
vb作成したらでbeep音が鳴りま...
-
次のhtml・cssでspan内の文字を...
-
classの再定義エラーについて
-
既存関数の上書き
-
protectedなのにアクセスできな...
-
UNIX CP "で上書きしません"
-
PHPでの画像の形式の変換
-
配列の操作時にLNK2001外部シン...
-
PHPプログラム上で「URLを直接...
-
Let's Encryptで自動更新がされ...
-
ExcelVBAで部分一致(*)をしたい
-
VB6のコンボボックスのテキスト...
-
ASPのResponse.WriteをPHPでは...
おすすめ情報