Xmlを読み込む際には、URLにユニークな変数を追加して、かならず再読み込みをさせたほうがいいみたい。
基本のURLのままだと、変更しても再読み込みの際、キャッシュから読んで新たに読み込んでくれない。
URL(String)にユニークな変数を追加する関数
import flash.net.LocalConnection;
//基本のURL
var xml_str:String = "http://hoge.com/hoge.xml";
//基本のURLにユニークな変数を追加
xml_str = setNoCashURL(xml_str);
private function setNoCashURL(url_str):String {
//サーバーにあがってるか同かを調べるため
var lc:LocalConnection = new LocalConnection();
//現在のドメイン名を取得
var domain_str:String = lc.domain;
//ドメイン名がlocalhostの時はローカルでのテストなので変数はつけない。
//(変数がついてるとローカルではxmlが読みこまれないみたい)
if (domain_str != "localhost") {
//現在時刻を取得することでユニークな数値を取得
var noCash:Number = new Date().getTime();
//URLに追加できる形にして数値を文字列化
var noCash_str:String = "?nocash="+String(noCash);
} else {
noCash_str = "";
}
url_str += noCash_str;
//変数を追加した文字列を返す
return url_str;
}
Tags: AS3, Flash, XML
フレームアクションでこんな感じ。
var xml:XML =
<sampleXML>
<test>まるいち</test>
<test>まるに</test>
<test>まるさん</test>
<test>まるよん</test>
<test>まるご</test>
</sampleXML>;
trace(xml);
var xmlArray:Array = new Array();
var sampleXMLList:XMLList = xml.test;
//配列にtest要素を突っ込む
for (var i:uint = 0; i< sampleXMLList.length(); i++) {
xmlArray.push(xml.test[i]);
}
//配列の中身を確認
for (i = 0; i < xmlArray.length; i++) {
trace("xmlArray その1 : "+xmlArray[i]);
}
//配列を空にする。
xmlArray = [];
//配列にtest要素を突っ込む
for each (var container:Object in xml.test) {
xmlArray.push(container);
}
//配列の中身を確認
for (i = 0; i < xmlArray.length; i++) {
trace("xmlArray その2 : "+xmlArray[i]);
}
プレビュー時の出力はこんな感じ
まるいち
まるに
まるさん
まるよん
まるご
xmlArray その1 : まるいち
xmlArray その1 : まるに
xmlArray その1 : まるさん
xmlArray その1 : まるよん
xmlArray その1 : まるご
xmlArray その2 : まるいち
xmlArray その2 : まるに
xmlArray その2 : まるさん
xmlArray その2 : まるよん
xmlArray その2 : まるご
注意するのは
Arrayの中身を数えるのは、Array.length
XMLListの中身を数えるのは、XMLList.length();
微妙に違うところ。
あとfor each (in)分を使えば、データの数がわからなくとも、データがあるだけループさせられる。
Tags: AS3, Flash, XML, XMLList
読み込んだXMLをTextFieldに表示させるときに、
XML側では、こんな感じで書くとその中の改行がそのまま表示できる。
<?xml version="1.0" encoding="UTF-8"?>
<sample>
<description>
<![CDATA[あかさなた
はまやらわ]]>
</description>
</sample>
ただその際に改行コードの問題で、一回しか改行してないつもりでも2行で改行されてしまうときがある。
↓こうでてほしいのに
あかさなた
はまやらわ
↓こうなる
あかさなた
はまやらわ
Windowsの改行コードの問題なので、
xmlから読み込んだストリングの改行コードを変換してあげればOK
//xmlから読み込んだストリングの
var strictDescription:String = xml.description[0];
//改行コードを\nに統一する。
strictDescription = strictDescription.replace(/\r\n/g, '\n');
Tags: AS3, Flash, XML
//XMLからノードを抜き出したものがXMLListとなるらしい。
//抜き出したノードはXMLListに代入できる
var xml:XML=
<data1>
<node>Node1</node>
<node>Node2</node>
</data1>;
var xmllist:XMLList = new XMLList();
xmllist = xml.node;
//でもXMLに代入はできない。
var xml:XML=
<data1>
<node>Node1</node>
<node>Node2</node>
</data1>;
var xml1:XML = new XML();//XMLではダメ。
xml1 = xml.node;
//2008/1/15追記
//これならXMLとなる
xml1 = xml.node[0];
Tags: AS3, Flash, XML, XMLList