SimpleXML->asXML()がうまく動作しません - PHPプロ!Q&A掲示板

746

  • 0P

SimpleXML->asXML()がうまく動作しません

質問日時 / 2007年11月8日 15:07    回答数 / 6件

Questioner:  old_man  このエントリーをはてなブックマークに追加 

キーワード / SimpleXML    asXML   

はじめて質問させていただきます。

以下のソースで、xmlファイルを操作したいのですが、

  1. --- source ---
  2. function overwriteXml($file_name)
  3. {
  4.     $xml = simplexml_load_string(file_get_contents(XML_FILEPATH));
  5.     $file = UPLOAD_PATH. $file_name;
  6.     $xml->contents['file'] = $file;   //cotentsのfileを編集
  7.     // 出力
  8.     file_put_contents(XML_FILEPATH, $xml->asXML());
  9. }
  10.  
  11.  
  12. --- xml ---
  13. <?xml version="1.0" encoding="UTF-8"?>
  14. <headline>
  15. <!-- 1 -->
  16.   <contents title="dummy" file="http://localhost/head_line/1_test.flv" thums="dummy.jpg" type="dummy" url="dummy/" target="_self">
  17.     <text>dummy</text>
  18.     <cm file="dummy.jpg" type="movie"/>
  19.   </contents>
  20. </headline>


$file_nameに、データベースから取得した値を渡して
定数 UPLOAD_PATHと結合して、contentsのfileを編集する
というのが一連の流れになります。


これを実行すると、contensのfileには、

  <contents title="dummy" file="http://localhost/head_line/" thums="dummy.jpg" type="dummy" url="dummy/" target="_self">

のようにUPLOAD_PATHのパスのみが出力されてしまいます。


ちなみに、

  $xml->contents['file'] = $file;

の後に echoしてみると、定数とファイル名が結合された値が表示
されます。


また、
    $file = UPLOAD_PATH. $file_name;
を、
    $file = UPLOAD_PATH. "2_test.flv";  //DBに格納されている値と一緒
としたり、
    overwriteXml("1_test.flv");
とすると、echoのみならず xmlも正しく出力できます。

なぜか、DBから取得した値を用いるとうまく出力されません。
これ以上どうすれば良いかわからなくなり質問した次第です。

環境:
  PHP Version 5.2.2
  PostgreSQL 8.2
  cakePHP

ご教示のほどよろしくお願いいたします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01mgngmgngDBの値が空としか考えられませんが、 $file_nameの値
┃┗A01-1old_man返信ありがとうございます。 $xmlを出力すると配列
┗A02mgngmgngfile_put_contents(XML_FILEPATH, $xml->asXML());
 ┗A02-1old_man以下が、var_dump($xml)の結果になります。 object
  ┣A02-1-1old_man追伸:  ["file"]=> string(62) "http://localhost
  ┗A02-1-2mgngmgngvar_dumpにもしっかりデータがはいっていますね...

回答一覧

並び替え:

A01
answerermgngmgng [11月9日 14:48]

DBの値が空としか考えられませんが、
$file_nameの値がほんとうにはいっているか、
var_dumpして調べてみてはどうでしょうか。

この意見に回答する

ツリーへ TOPへ

A01-1
replyerold_man [11月9日 15:12]

返信ありがとうございます。

$xmlを出力すると配列の中に値はセットされています。
ところが、$xml->asXML()するとDBの値だけ(定数は出力されている)が
消えてしまうんです。

この意見に回答する

ツリーへ TOPへ

A02
answerermgngmgng [11月9日 16:11]

file_put_contents(XML_FILEPATH, $xml->asXML());
する直前に
var_dump($xml);
した結果って提示できますか?

この意見に回答する

ツリーへ TOPへ

A02-1
replyerold_man [11月9日 17:06]

以下が、var_dump($xml)の結果になります。

object(SimpleXMLElement)#12 (2) { ["comment"]=>  object(SimpleXMLElement)#16 (0) { } ["contents"]=>  object(SimpleXMLElement)#17 (3) { ["@attributes"]=>  array(6) { ["title"]=>  string(5) "dummy" ["file"]=>  string(62) "http://localhost/head_line/app/webroot/upload/head_line/7_main.swf" ["thums"]=>  string(9) "dummy.jpg" ["type"]=>  string(5) "dummy" ["url"]=>  string(6) "dummy/" ["target"]=>  string(5) "_self" } ["text"]=>  string(5) "dummy" ["cm"]=>  object(SimpleXMLElement)#18 (1) { ["@attributes"]=>  array(2) { ["file"]=>  string(9) "dummy.jpg" ["type"]=>  string(5) "movie" } } } }


--- 出力されたxml ---
<?xml version="1.0" encoding="UTF-8"?>
<headline>
<!-- 1 -->
<contents title="dummy" file="http://localhost/head_line/app/webroot/upload/head_line/" thums="dummy.jpg" type="dummy" url="dummy/" target="_self">
<text>dummy</text>
<cm file="dummy.jpg" type="movie"/>
</contents>
</headline>

この意見に回答する

ツリーへ TOPへ

A02-1-1
replyerold_man [11月9日 17:11]

追伸:
 ["file"]=>  string(62) "http://localhost/head_line/app/webroot/upload/head_line/7_main.swf"
は、一部 urlを書き換えてます。
なので、文字数は一致してません。

この意見に回答する

ツリーへ TOPへ

A02-1-2
replyermgngmgng [11月12日 11:54]

var_dumpにもしっかりデータがはいっていますね...
ということは asXML を疑うしかないのですが...

asXMLを使わずにXMLを組み立てて出力することくらいしか思いつきません。
お役に立てずすみません。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
マジッククォートとmysql_real_escape_string
 このエントリーをはてなブックマークに追加 
A
magic_quotes_gpcでは、SQLインジェクション対処は十分できません。主な理由として、以下が上げられます。 ・magic_quotes_gpcは文字コードを考慮しないで処理するので、Shift_JISを使っている場合、SQLインジェ...

>>続きを読む

SQLインジェクション対策は時と場合で使う関数が変わります。その時にあったものを使いましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)