FlashでXMLを使用する際の改行、特殊文字とファイルの保存について。
FlashでXMLを読み込む際に毎回引っかかる、改行と特殊文字の実体参照、XMLファイルの保存についての覚書。
■特殊文字・「 & 」 アンパサンド = &
・「 < 」 不等号(より小さい) = <
・「 > 」 不等号(より大きい) = >
・「 " 」 二重引用符 = "
・「 ' 」 アポストロフィ = '
■改行
・ 改行UNIX LF(\n) = 

・ 改行Mac CR(\r) = 
・ 改行Windows CR(\r) + LF(\n) = 

テキストノードに文章を書くときは、CDATAセクションを使用したほうが楽なようだ。
例:
<![CDATA[<<CDATA セクション>>
'CDATA'はCharacter Dataの略で、"シーデータ"とも呼びます。]]>
■XMLファイルの保存について
XMLファイルを保存する際は、エンコードを「UTF-8(BOM付き)」に、改行方法を「LFのみ」にしておく。 UTF-8をBOM付きにするのは日本語を使用する際の文字化け防止のため。
改行をLFのみにするのはWindowsで改行方法を「CR+LF」にすると CDATAセクションでの改行が二回行われてしまうため。
参考:XHTML1.0での特殊文字の実体参照まとめ。
SAMPLE VIEW CODE
package {
import flash.display.*;
import flash.events.*;
import flash.net.*;
public class NMain extends MovieClip {
//-------------------------------------------------------------------------------- Properties
private var _this:*;
private var _stage:Stage;
//-------------------------------------------------------------------------------- Constractor
public function NMain() {
_this = this;
_stage = stage;
_stage.scaleMode = StageScaleMode.NO_SCALE;
_stage.align = StageAlign.TOP_LEFT;
Init();
}
//-------------------------------------------------------------------------------- Function
/**
* initialize
*/
public function Init():void {
setup();
Start();
}
/**
* start
*/
public function Start():void {
loadxml();
}
/**
* setup
*/
private var _tf:TextField;
private function setup():void {
_tf = _this["tf"];
}
//
private function showtext(tgtxml:XML):void {
_tf.text = tgtxml.@title.toString() + "\n\n" + tgtxml.original.@title.toString() + tgtxml.original.text() + tgtxml.translation.text();
}
/**
* load xml
*/
private function loadxml():void {
var urlrequest:URLRequest = new URLRequest("hagakure.xml");
var urlloader = new URLLoader();
try {
urlloader.load(urlrequest);
}
catch(er:SecurityError) {
_tf.text = "A SecurityError has occurred.";
}
urlloader.addEventListener(IOErrorEvent.IO_ERROR, loadxml_ioerror);
urlloader.addEventListener(Event.COMPLETE, loadxml_complete);
}
//
private function loadxml_complete(eo:* = null):void {
try {
var tgtxml = new XML(eo.currentTarget.data);
showtext(tgtxml);
}
catch(er:TypeError) {
_tf.text = "Could not parse the XML file.";
}
}
//
private function loadxml_ioerror(eo:* = null):void {
_tf.text = "Had problem loading the XML File.";
}
}
}