FlashでのXMLについて

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
Ushishi
記事: 5
登録日時: 2007年8月24日(金) 14:20

FlashでのXMLについて

投稿記事 by Ushishi » 2007年9月07日(金) 23:37

Flashで読み込むXMLを、CMS Designerを利用して生成しています。

XML形式を出力するPHPは下記のように、マニュアルに沿って書きました。
xml.php

コード: 全て選択

<?php require_once("cmsdesigner/include/view.php.inc"); // encoding="euc-jp" ?>
<cmsd:entrylist name="mylist" design="flash" output="xml" />
<?php cmsd_end_template(); ?>
デザイン定義のXSLTは、下記のように書きました。
mylist.list.flash.design.xsl

コード: 全て選択

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="EUC-JP" omit-xml-declaration="yes" indent="yes" />
<xsl:template match="/entrylist">
	<xsl:for-each select="entry">
		<myList title="{title}" comment="{comment}" author="{author}" update="{@date}" />
	</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
ここで、出力したXMLが、

コード: 全て選択

<myList title="Good Day" comment="I am so happy" author="Honda" update="2007-09-09" />
<myList title="Bad Day" comment="I am not happy" author="Honda" update="2007-09-08" />
みたいに、属性値が英語の場合は、Flashで読み込むことが可能なのですが、

コード: 全て選択

<myList title="いい日" comment="私は幸せだ" author="本田" update="2007-09-08" />
<myList title="悪い日" comment="私は幸せじゃない" author="本田" update="2007-09-09" />
このように、属性が日本語になると、Flashで読み込むことができません。

よく分かりませんが、文字コードとかの関連で正しいXMLとして認識されないのではないかと考えたのですが…どなたかご指導お願いいたします。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: FlashでのXMLについて

投稿記事 by webmaster » 2007年9月08日(土) 06:05

 Ushishiさん、ご質問ありがとうございます。
 Flashとの連携事例はまだ少ない為、大変助かります。

 XMLとして出力する場合、デザイン定義型で

・omit-xml-declaration="yes" を指定「しない」。(又は"no"にする)
・method="xml"にする。
・encoding="UTF-8"にする(これは、読み込み側がUTF-8を前提としている場合のみ)。

 の対処が必要となります。
 今回ですと、おそらくomit-xml-declarationがyesだった為XML宣言が出力
されず、文字コードが不明の状態になったのだと思います。

 ところで、出力されるXMLの「ルート要素」が無いようなので、何か適当に
付けておいた方が良いかと思います(読み込み側でも対処が必要になりますが…)。
 XMLデータには必ず「唯一の」ルート要素が必要です。

 まとめると、こんな風になるかと思います。

コード: 全て選択

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<myData>
<xsl:template match="/entrylist">
	<xsl:for-each select="entry">
		<myList title="{title}" comment="{comment}" author="{author}" update="{@date}" />
	</xsl:for-each>
</xsl:template>
</myData>
</xsl:stylesheet>
 出力はこんな風になります。

コード: 全て選択

<?xml version="1.0" encoding="UTF=8" ?>
<myData>
  <myList title="いい日" comment="私は幸せだ" author="本田" update="2007-09-08" />
  <myList title="悪い日" comment="私は幸せじゃない" author="本田" update="2007-09-09" />
</myData>
 階層構造が変わるので、Flash側のコードも少し修正が必要になるかと思います。

 この辺、マニュアルからは省略されており、XSLTに詳しい方でないと自力では
難しいかったかと思います。m(__)m
 一度お試し頂ければ幸いです。

返信