• 締切済み

見やすく出力させたいです。

DB→PHPでのXMLデータを呼び出し→Flashに出力 すると下記のように このように格好わるく出力されます。 まつお東京20010203 とき大阪20090625 ひまわり東京20100206 これを下記のように見やすく出力させたいですがどうしたらいいですか? まつお   東京    20010203 とき     大阪    20090625 ひまわり  東京    20100206 アクションスクリプトソースです。AS(2.0) var theXML:XML = new XML(); theXML.ignoreWhite = true; theXML.onLoad = function() { var nodes = this.firstChild.childNodes; for(i=0; i<nodes.length; i++) { thelist.addItem(nodes[i].firstChild.nodeValue,i); } } theXML.load("http://XXXX/doglist.php?dog=8); 下記はphpソースです。 ...省略 echo "<?xml version=\"1.0\"?>\n"; echo "<dogDB>\n"; while($line = mysql_fetch_assoc ($result)){ echo "<item>" . $line["name"] . $line["sumai"] .$line["birthady"] ."</item>\n"; } echo "</dogDB>\n"; ...省略 ご教授よろしくお願いいたします。

みんなの回答

  • mahny
  • ベストアンサー率74% (57/77)
回答No.3

返信ありがとうございます。 > 変数thelistとは、listコンポネットのインスタンス名です。 …ということで、調べました。 そのコンポーネントだと文字列を1行につき1つしか表示できないと思います。 1行に3つ表示したいのですからDataGridの方が向いていると思います。 http://livedocs.adobe.com/flash/9.0_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002716.html (DataGridインスタンスに、3つのDataGridColumnインスタンスを追加で実装可と思われます) 残念ながら、私はFlashCSを持っていないのでAS2.0版のDataGridを 試すことは出来ませんでした。 AS3.0(Flex)なら実装してみましたが…、ご希望であればコードを投稿します。 > ご教授頂いたとおりにやりましたら~ 多分、コピペ等でそのまま動かした為だと思います。 投稿時、コードのインデントに全角スペースを利用したのと、 行末にセミコロンがいくつか抜けていたせいです。すいません。 PHPを書くのは初めてですが、今度はコンパイラを使って動かしてみました。 掲載コードのforループ内のechoを karisuma79さんのコードに 移植すればXML出力できると思います。 -------------------- ダミーXML出力PHP -------------------- <?php header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); // DB構築してないので簡易データを用意 $record = array(); $record[] = array("name" => "まつお", "sumai" => "東京", "birthday" => "20010203"); $record[] = array("name" => "とき", "sumai" => "大阪", "birthday" => "20090625"); $record[] = array("name" => "ひまわり", "sumai" => "東京", "birthday" => "20100206"); echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"; echo "<dogDB>\n"; // DBから取得する(つもり) for ($i = 0; $i < count($record); $i++) { $line = $record[$i]; echo "\t<item>\n"; echo "\t\t<name>" . $line["name"] . "</name>\n"; echo "\t\t<sumai>" . $line["sumai"] . "</sumai>\n"; echo "\t\t<birthday>" . $line["birthday"] . "</birthday>\n"; echo "\t</item>\n"; } echo "</dogDB>\n"; ?>

  • mahny
  • ベストアンサー率74% (57/77)
回答No.2

すいません。 出されている情報からはこれ以上の説明をするのは私には出来ませんので、ちょっと質問します。 1. 現在FlashでXMLデータを画面にどんなコードで出力しているのでしょうか?  提示されたASコードは、データの出力がされていません。  変数thelist:型不明(ArrayCollection?)にXMLのノードを追加しているだけです。 2. #1で回答した内容について、アドバイスをどう活かすか皆目見当が付かないという事でしょうか?  今のXMLデータ形式では綺麗に出力させようとする時、  "まつお東京20010203" となっててASで加工しにくいでしょうから  PHPの時点で"まつお", "東京", "20010203"の3つに分解しましょう  ってアドバイスでした。  実践できれば下図のデータモデルになります。   現状の形式           提案した形式  ┏━━━━━━━━━━┓┏━━━━┳━━┳━━━━┓ 1┃まつお東京20010203  ┃┃まつお  ┃東京┃20010203┃  ┣━━━━━━━━━━┫┣━━━━╋━━╋━━━━┫ 2┃とき大阪20090625    ┃┃とき    ┃大阪┃20090625┃  ┣━━━━━━━━━━┫┣━━━━╋━━╋━━━━┫ 3┃ひまわり東京20100206 ┃┃ひまわり ┃東京┃20100206┃  ┗━━━━━━━━━━┛┗━━━━┻━━┻━━━━┛  で、こういう出力をするPHPの方は↓みたいに  なるんじゃないかなーと予想します。(未検証) -------------------- doglist.php(一部抜粋) -------------------- echo "<?xml version=\"1.0\"?>\n"; echo "<dogDB>\n"; while($line = mysql_fetch_assoc ($result)){  echo "\t<item>"  echo "\t\t<name>" . $line["name"] . "</name>\n"  echo "\t\t<sumai>" . $line["sumai"] . "</sumai>\n"  echo "\t\t<birthady>" . $line["birthady"] . "</birthady>\n"  echo "\t</item>\n"; } echo "</dogDB>\n"; -------------------- ActionScriptの方はとりあえずkarisuma79さんの 回答を待ってから考えます。 P.S. >自分は、超初心者ですので、わからない部分が多いです。 ネットの向こうにいる相手に自分が初心者だとか言っても意味ありません。 私は初心者である事は物事の分からない理由にならないと思ってます。 初心者なりに問題解決に向けて解法を考えて、試して、失敗した事があるはずです。 そういった物を相談して欲しいですし、その方がこちらも親身かつ的確に答えられると思います。

karisuma79
質問者

補足

mahny様、ご回答ありがとうございます。 >1 変数thelistとは、listコンポネットのインスタンス名です。 データはlistに出力されます。 >2 PHPの時点で"まつお", "東京", "20010203"の3つに分解したいですね、、 ご教授頂いたとおりにやりましたら、データをDBから呼び出すことが できませんでした。 doglist.phpを直接にIEで見ると以下のように表示されます。 「Web サイト側でページを表示できません」 P.Sありがとうございます。

  • mahny
  • ベストアンサー率74% (57/77)
回答No.1

私はPHPを書かないので文法には触れられませんが、 PHP側で吐くXML形式がマズイんだと思います。 多分、今ってこんな形式になりますよね…。 <dogDB>  <item>まつお東京20010203</item>  <item>とき大阪20090625</item>  <item>ひまわり東京20100206</item> <dogDB> わざわざMySQLから取得時に使うカラム名を 捨てる必要はないと思います。 なので、↓なカンジでPHPから出力。 <dogDB>  <item>   <name>まつお</name>   <sumai>東京</sumai>   <birthday>20010203</birthday>  </item>  <item>   …(略)…  </item> <dogDB> これをFlashで表示するコードにした方が簡単でしょう。 1レコードにつき3つのラベルを用意するコードを記述すればOKだと思います。 ラベルの位置調整とかは自由にいけますしね♪

karisuma79
質問者

補足

mahny様、ご回答ありがとうございます。 自分は、超初心者ですので、わからない部分が多いです。 もっと詳細に教えて頂きませんか? ご教授よろしくお願いします。

関連するQ&A