XMLを表示できない - PHPプロ!Q&A掲示板

2945

  • 0P

XMLを表示できない

質問日時 / 2010年10月28日 08:40    回答数 / 6件

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

キーワード / XML    Dom   

いつも参考にしています。ありがとうございます。

早速ですが、今回はじめてXMLを扱う必要がでてきました。
恥ずかしながらこれまでXMLは一切触ったことがなく、まったく意識したことがありませんでした。

今回実行したいことは
「PHPのプログラムでパラメータを受け取り、その値を元に処理をした結果をXMLで表示する」ことで
Dom関数(?)でXMLを作成し、echoコマンドで表示しようしています。

OS:CentOS5.5
PHP:php-5.1.6-27.el5
インストール済みPHP関連パッケージ
php-pear/php-devel/php-cli/php-ldap/php-xml/php-common/php-pdo

コマンドラインからphp -f  ファイル名として実行すると画面上にXMLが表示されるのですが、
ブラウザでphpファイルを実行すると、画面にはechoで出力しようとしている内容が
何も表示がされません。

必要な処理がかけているのでしょうか?
アドバイス頂ければ助かります。どうぞよろしくお願い申し上げます。

  1. dom = new DomDocument('1.0');
  2. $dom->encoding = "UTF-8";
  3. $dom->formatOutput = true;
  4. $ROOT = $dom->appendChild($dom->createElement('root'));
  5.  
  6. $KEY= $ROOT->appendChild($dom->createElement('key'));
  7. $KEY->appendChild($dom->createTextNode($key));
  8.  
  9. $DATA= $ROOT->appendChild($dom->createElement('data'));
  10. $DATA->appendChild($dom->createTextNode($data));
  11.  
  12.  
  13. // DomXMLをXML形式で出力
  14. echo "XMLを出力するよ<BR>";
  15. echo $dom->saveXML();


ツリー一覧

┗A01shimix>画面にはechoで出力しようとしている内容が何も表示
 ┗A01-1MACHIKOありがとうございます。ブラウザはFirefox3.6.11/IE8
  ┗A01-1-1shimix同じソースをこちらで試した限りでは、下記のようなコ
   ┗A01-1-1-1MACHIKOありがとうございます。 転記いただいたソースをそ
    ┗A01-1-1-1-1shimix>phpinfoを確認したところ、「--disable-xmlwrite」と
     ┗A01-1-1-1-1-1MACHIKOありがとうございます。 マシンの再起動やブラウザ

回答一覧

並び替え:

A01
answerershimix [10月28日 08:48]

>画面にはechoで出力しようとしている内容が何も表示がされません。

ブラウザは何でしょう?XMLをキチンと表示するブラウザならいいんですが・・。画面表示ではなく(ブラウザの)ソース表示で『何が返されているか』を確認した方がいいと思います。

#レスポンスヘッダでContent-typeをtext/plainにすれば「そのまま」表示するかもしれませんが(汗

この意見に回答する

ツリーへ TOPへ

A01-1
replyerMACHIKO [10月28日 10:05]

ありがとうございます。ブラウザはFirefox3.6.11/IE8 どちらもだめでした。
ソース表示で確認したところ、FireFoxでは何も表示されませんでしたが
IEでは下記内容が表示されました。

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <HTML><HEAD>
  3. <META content="text/html; charset=shift_jis" http-equiv=Content-Type></HEAD>
  4. <BODY></BODY></HTML>



ちなみにレスポンスヘッダをつけるとしたらechoの前に以下のように記述すれば良いでしょうか?

  1. header("Content-Type: text/plain");

この意見に回答する

ツリーへ TOPへ

A01-1-1
replyershimix [10月28日 10:27]

同じソースをこちらで試した限りでは、下記のようなコンテンツが返って来ます。
  1. XMLを出力するよ<BR><?xml version="1.0" encoding="UTF-8"?>
  2. <root>
  3.   <key></key>
  4.   <data></data>
  5. </root>
そもそも
  1. echo "XMLを出力するよ<BR>";
の内容すら返ってこないのはあり得ないと思います。error_reportingとかdisplay_errorsの設定はどうなっていますか?何か(エラーが発生して)実行出来ていないとしか思えないんですが・・。

というか
>ソース表示で確認したところ、FireFoxでは何も表示されませんでしたが
>IEでは下記内容が表示されました。
ブラウザでソース表示が違うというのはあり得ないので、(IEでの表示は)IEが何かよからぬことをしてるんですかねぇ。



念のため転記しますが、こちらで試したソースは下記です(環境はWindowsXP+xampp1.7.3です)。
  1. <?php
  2. $dom = new DomDocument('1.0');
  3. $dom->encoding = "UTF-8";
  4. $dom->formatOutput = true;
  5. $ROOT = $dom->appendChild($dom->createElement('root'));
  6.  
  7. $KEY$ROOT->appendChild($dom->createElement('key'));
  8. $KEY->appendChild($dom->createTextNode($key));
  9.  
  10. $DATA$ROOT->appendChild($dom->createElement('data'));
  11. $DATA->appendChild($dom->createTextNode($data));
  12.  
  13. // DomXMLをXML形式で出力
  14. echo "XMLを出力するよ<BR>";
  15. echo $dom->saveXML();
  16. ?>


(蛇足)
>レスポンスヘッダをつけるとしたらechoの前に以下のように記述すれば良いでしょうか?

はい。スクリプトの先頭から最初のechoまでの間でいいです。でも、ブラウザ側でソース表示で確認するのであれば(ブラウザ画面で確認しなくていいのであれば)Content-type: text/plainは出力しなくてもかまいません(あくまでもデバッグ時に画面で確認しやすくするだけなので)。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyerMACHIKO [10月28日 10:49]

ありがとうございます。

転記いただいたソースをそのままコピーして実行したのですが
ブラウザにはやはり何も表示されませんでした。

コマンドラインで実行するとXMLデータが表示されるのでエラーとは考えにくいと思っていたのですが
何か他にチェックするポイントなどありますでしょうか?

当初サーバにはphp-xmlをインストールしておらず、XMLを扱う必要がでたので
急遽yumでphp-xmlを追加しました。
phpinfoを確認したところ、「--disable-xmlwrite」となっていたのですが
これが原因でしょうか?
enableにする方法がわからずそのままになっています。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1 満足
replyershimix [10月28日 13:49]

>phpinfoを確認したところ、「--disable-xmlwrite」となっていたのですが
>これが原因でしょうか?

それが原因なのかどうか、error_reportingの設定を変更してエラー内容を可視化してください(と前のレスで書いたつもり)。

マニュアルを読む限りではdomとlibxmlだけ有効であれば問題ないと思いますが、私は質問者さんの環境での設定には詳しくないので(ローカルはWindowsだし、サーバはレンタルばっかりだし・・)。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1-1
replyerMACHIKO [10月28日 15:22]

ありがとうございます。

マシンの再起動やブラウザの再起動をしてもぜんぜんだめだったのですが
転記いただいたコードを元に再度コーディングしなおし
あらためてすべての環境を再起動したところ問題なく表示ができました。

初めてのXMLであわててしまって大変お恥ずかしい限りです。

shimixさんの環境では問題なく表示できているという一言で
冷静になれたと思います。
心強い助言、心から感謝しています。

ポイントを持っていないので差し上げることができないのですが
本当に感謝しています。ありがとうございました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
array_mergeの再帰処理の動作について
 このエントリーをはてなブックマークに追加 
A
>1個になったとき$leftを返しますが、 >このとき、最終的な$leftはnullになるかと思います。 いいえ、最後は「渡された配列をそのまま」返します。要素が2以上あるときとの違いは(並べ替えずに戻るので...

>>続きを読む

再帰関数は最初の内は混乱しますが、非常に上手く使える場面もいずれ出てきます。これを機会に学んでいけるといいですね。

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