ActionScript Memo 110526

5.26.2011

FlashでXMLを使用する際の改行、特殊文字とファイルの保存について。

FlashでXMLを読み込む際に毎回引っかかる、改行と特殊文字の実体参照、XMLファイルの保存についての覚書。

■特殊文字
・「 & 」 アンパサンド = &
・「 < 」 不等号(より小さい) = &lt;
・「 > 」 不等号(より大きい) = &gt;
・「 " 」 二重引用符 = &quot;
・「 ' 」 アポストロフィ = &apos;

■改行
・ 改行UNIX LF(\n)  = &#xA;
・ 改行Mac CR(\r) = &#xD;
・ 改行Windows CR(\r) + LF(\n) = &#xD;&#xA;

テキストノードに文章を書くときは、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.";
		}

	}
}





category : ActionScript / Flash / XML

Demonstrations

Feature Samples

Author

虹村 マキオウ (nizimura makiou)

猫と太極拳を愛する横浜在住のフリーランスクリエイターです。

logo

Demo and Sample

Category