<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>세계의끝과 플래시 원더랜드 &#187; OptimizeXMLString</title>
	<atom:link href="http://ufx.kr/blog/tag/optimizexmlstring/feed" rel="self" type="application/rss+xml" />
	<link>http://ufx.kr/blog</link>
	<description>Flash + ActionScript &#38; Design</description>
	<lastBuildDate>Fri, 27 Jan 2012 21:51:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>xml 작업에 최적화된 문자열 바꾸기 String replace 클래스</title>
		<link>http://ufx.kr/blog/339</link>
		<comments>http://ufx.kr/blog/339#comments</comments>
		<pubDate>Sun, 29 Nov 2009 04:31:09 +0000</pubDate>
		<dc:creator>세계의끝</dc:creator>
				<category><![CDATA[AS3.0 API]]></category>
		<category><![CDATA[OptimizeXMLString]]></category>
		<category><![CDATA[RegExp]]></category>
		<category><![CDATA[replace]]></category>
		<category><![CDATA[replaceString]]></category>
		<category><![CDATA[string]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[문자열]]></category>
		<category><![CDATA[바꾸기]]></category>
		<category><![CDATA[재사용]]></category>
		<category><![CDATA[재활용]]></category>
		<category><![CDATA[최적화]]></category>
		<category><![CDATA[치환]]></category>

		<guid isPermaLink="false">http://ufx.kr/blog/?p=339</guid>
		<description><![CDATA[xml을 이용해서 작업을 하다 보면 플래시의 TextField 특성에 기인해서 replace() 를 고정적으로 해 줘야 할 것이 몇 가지 있습니다. 1. 첫 번째로는 개행문자 입니다. 보통 xml의 개행문자는 &#8220;\r\n&#8221; 이지만,[01] 액션스크립트의 개행문자는 &#8220;\n&#8221; 입니다. 액션스크립트에서 &#8220;\r\n&#8221; 을 TextField 에 적용하면 위의 이미지와 같이 2줄이 개행이 되버리는 문제를 교정하기 위해서 &#8220;\r\n&#8221; 를 &#8220;\n&#8221; 로 replace() 해 줘야 [...]]]></description>
			<content:encoded><![CDATA[<p>xml을 이용해서 작업을 하다 보면 플래시의 TextField 특성에 기인해서 replace() 를 고정적으로 해 줘야 할 것이 몇 가지 있습니다.</p>
<p><strong>1. 첫 번째로는 개행문자 입니다.</strong><br />
<div id="attachment_340" class="wp-caption alignnone" style="width: 590px"><img src="http://ufx.kr/blog/wp-content/uploads/2009/11/case1.png" alt="왼쪽과 같이 나오길 기대하지만 개행 문제 때문에 오른쪽과 같이 되버립니다." title="개행문제" width="580" height="204" class="size-full wp-image-340" /><p class="wp-caption-text">왼쪽과 같이 나오길 기대하지만 개행 문제 때문에 오른쪽과 같이 되버립니다.</p></div><br />
보통 xml의 개행문자는 &#8220;\r\n&#8221; 이지만,<sup>[<a href="http://ufx.kr/blog/339#footnote_0_339" id="identifier_0_339" class="footnote-link footnote-identifier-link" title=" xml 뿐만 아니라 html, php, jsp 등 서버사이드쪽에서 사용되는 텍스트 문서 전체에 해당되기도 하죠. ">01</a>]</sup> 액션스크립트의 개행문자는 &#8220;\n&#8221; 입니다. 액션스크립트에서 &#8220;\r\n&#8221; 을 TextField 에 적용하면 위의 이미지와 같이 2줄이 개행이 되버리는 문제를 교정하기 위해서 &#8220;\r\n&#8221; 를 &#8220;\n&#8221; 로 replace() 해 줘야 합니다.</p>
<p><span id="more-339"></span><center>&#8230;</center></p>
<p><strong>2. 두 번째로는 탭 문자 입니다.</strong><br />
<div id="attachment_341" class="wp-caption alignleft" style="width: 283px"><img src="http://ufx.kr/blog/wp-content/uploads/2009/11/case2_1.png" alt="이런 화면, 종종 만나보셨을 겁니다." title="탭 문자 문제" width="273" height="166" class="size-full wp-image-341" /><p class="wp-caption-text">이런 화면, 종종 만나보셨을 겁니다.</p></div>대부분의 에디터에서 가독성을 보장하기 위해서 자동 탭 문자 들여쓰기 기능을 가지고 있는데, 이것이 xml parser 에 의해 액면가 그대로 액션스크립트에 전달됩니다. 즉, 왼쪽과 같은 현상이죠.<br />
이 문제를 해결하기 위해서 xml 을 작성할때 개행을 위해서 엔터를 입력할때 자동으로 탭 문자를 들여쓰지 않기 위해 아래쪽 에디트플러스의 화면과 같이 개행한 이후 다음 라인의 첫 열로 입력 커서를 위치시키는 번거로운 작업을 하는 경우도 있습니다.<br />
탭 문자가 전혀 필요하지 않다고 단정지을 수는 없지만, 일반적으로 xml을 작성할때 생기는 자동 들여쓰기의 탭은 액션스크립트의 TextField 에서는 사용할 일이 없을뿐더러, 우리가 의도하지 않은 엉뚱한 결과를 내기 때문에 탭 문자인 &#8220;\t&#8221; 을 공백이 없는 &#8220;&#8221; 로 변경합니다.<br />
<div id="attachment_342" class="wp-caption alignnone" style="width: 589px"><img src="http://ufx.kr/blog/wp-content/uploads/2009/11/case2_2.png" alt="Edit plus 에서의 화면, 왼쪽과 같이 입력되지만 탭 문자 때문에 오른쪽 같이 수정해야하는 경우가 있습니다." title="에디터에서의 탭 문자 자동 입력" width="579" height="137" class="size-full wp-image-342" /><p class="wp-caption-text">Edit plus 에서의 화면, 왼쪽과 같이 입력되지만 탭 문자 때문에 오른쪽 같이 수정해야하는 경우가 있습니다.</p></div></p>
<p><center>&#8230;</center></p>
<p><strong>3. 세 번째로는 &#038; (앰퍼샌드) 문자입니다.</strong><br />
xml 은 모든 특수문자가 입력 가능하지만, &#038;만큼은 예외로 xml 노드명, 노드값, 속성명, 속성값 어디에 있건 파싱 에러를 내게 됩니다. 액션스크립트가 에러를 내기 이전에 xml 파일을 브라우저로 열어보는것 만으로도 &#038;는 xml 에 사용될 수 없음을 잘 알 수 있습니다.<br />
그렇다고 &#038;를 안쓸 수 있느냐 하면 그럴수도 없습니다. 네비게이션 바 만들때 Q&#038;A 같은 문자열은 매번 문제가 되죠. &#038;를 입력할 일이 있을 때 and 로 바꿔서 입력하려는 노력도, Q&#038;A 앞에서는 한동안 멍때리게 됩니다.<br />
그래서 &#038;의 코드 값인 &#8220;%26&#8243;으로 입력하고 액션스크립트에서 &#8220;&#038;&#8221;로 바꿔 줍니다. Q&#038;A 는 Q%26A 로 입력하면 되겠죠.</p>
<p><center>&#8230;</center></p>
<p>이렇게 xml 단골 replace 를 모아서 한번에 처리할 수 있는 클래스를 만들었으니 이름하여 OptimizeXMLString 입니다.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> kr.ufx.utils
<span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> kr.ufx.<span style="color: #004993;">text</span>.replaceString;
&nbsp;
	<span style="color: #3f5fbf;">/**
	 * ...
	 * @author 원종선(세계의끝) http://ufx.kr/blog
	 */</span>
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> OptimizeXMLString
	<span style="color: #000000;">&#123;</span>
		<span style="color: #009900;">// 찾을 문자열</span>
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _arrStringList<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Array</span> = <span style="color: #000000;">&#91;</span> <span style="color: #990000;">&quot;<span style="">\r</span><span style="">\n</span>&quot;</span>, <span style="color: #990000;">&quot;<span style="">\t</span>&quot;</span>, <span style="color: #990000;">&quot;%26&quot;</span> <span style="color: #000000;">&#93;</span>;
&nbsp;
		<span style="color: #009900;">// 바꿔낼 문자열</span>
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _arrReplacedList<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Array</span> = <span style="color: #000000;">&#91;</span> <span style="color: #990000;">&quot;<span style="">\n</span>&quot;</span>, <span style="color: #990000;">&quot;&quot;</span>, <span style="color: #990000;">&quot;&amp;&quot;</span> <span style="color: #000000;">&#93;</span>;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _text<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span>;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> OptimizeXMLString<span style="color: #000000;">&#40;</span> $text<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #0033ff; font-weight: bold;">null</span> <span style="color: #000000;">&#41;</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #0033ff; font-weight: bold;">this</span>._text = $text;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> addReplace<span style="color: #000000;">&#40;</span> $string<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span>, $replaced<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> <span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			_arrStringList.<span style="color: #004993;">push</span><span style="color: #000000;">&#40;</span> $string <span style="color: #000000;">&#41;</span>;
			_arrReplacedList.<span style="color: #004993;">push</span><span style="color: #000000;">&#40;</span> $replaced <span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> optimizing<span style="color: #000000;">&#40;</span> $text<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #0033ff; font-weight: bold;">null</span> <span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #6699cc; font-weight: bold;">var</span> str<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #004993;">getText</span><span style="color: #000000;">&#40;</span> $text <span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #6699cc; font-weight: bold;">var</span> len<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">uint</span> = _arrStringList.<span style="color: #004993;">length</span>;
			<span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #000000;">&#40;</span> <span style="color: #6699cc; font-weight: bold;">var</span> i<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">uint</span> = <span style="color: #000000; font-weight:bold;">0</span>; i <span style="color: #000000; font-weight: bold;">&lt;</span> len; <span style="color: #000000; font-weight: bold;">++</span>i <span style="color: #000000;">&#41;</span>
			<span style="color: #000000;">&#123;</span>
				str = replaceString<span style="color: #000000;">&#40;</span> str, _arrStringList<span style="color: #000000;">&#91;</span> i <span style="color: #000000;">&#93;</span>, _arrReplacedList<span style="color: #000000;">&#91;</span> i <span style="color: #000000;">&#93;</span> <span style="color: #000000;">&#41;</span>
			<span style="color: #000000;">&#125;</span>
			<span style="color: #0033ff; font-weight: bold;">return</span> str;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">getText</span><span style="color: #000000;">&#40;</span> $text<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> <span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #6699cc; font-weight: bold;">var</span> str<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span>;
&nbsp;
			<span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span> $text <span style="color: #000000;">&#41;</span>
				str = _text = $text;
&nbsp;
			<span style="color: #0033ff; font-weight: bold;">else</span> <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span> _text <span style="color: #000000;">&#41;</span>
				str = _text;
&nbsp;
			<span style="color: #0033ff; font-weight: bold;">else</span>
				str = <span style="color: #990000;">&quot;&quot;</span>;
&nbsp;
			<span style="color: #0033ff; font-weight: bold;">return</span> str;
		<span style="color: #000000;">&#125;</span>
&nbsp;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> stringList<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Array</span> <span style="color: #000000;">&#123;</span> <span style="color: #0033ff; font-weight: bold;">return</span> _arrStringList; <span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> replacedList<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Array</span> <span style="color: #000000;">&#123;</span> <span style="color: #0033ff; font-weight: bold;">return</span> _arrReplacedList; <span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> <span style="color: #004993;">text</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> <span style="color: #000000;">&#123;</span> <span style="color: #0033ff; font-weight: bold;">return</span> _text; <span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">set</span> <span style="color: #004993;">text</span><span style="color: #000000;">&#40;</span> $value<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> <span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> 
		<span style="color: #000000;">&#123;</span>
			_text = $value;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>이렇게 기본적으로 위에서 열거한 세 가지의 단골 문자열을 배열로 기본 입력해 놓고, replace 가 필요한 문자열이 더 있다면 추가해서 사용하는 방식으로 클래스를 구성하였습니다.<br />
실제로 이 클래스는 replace 를 할 문자열을 추가, 관리, 조회 하는 내용만 존재하고, 실제로 문자열을 바꿔주는 기능은 <a href="http://ufx.kr/blog/338">이전 포스트에서 소개해 드린 replaceString</a> 파일에서 수행합니다.<sup>[<a href="http://ufx.kr/blog/339#footnote_1_339" id="identifier_1_339" class="footnote-link footnote-identifier-link" title=" OptimizeXMLString 클래스 상단에 kr.ufx.text.replaceString 파일이 import 된 것을 확인할 수 있습니다. ">02</a>]</sup></p>
<p>OptimizeXMLString 를 이용해서 여러가지 형태로 사용하는 방법을 아래의 호스트코드에서 보시죠.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">import</span> kr.ufx.utils.OptimizeXMLString;
&nbsp;
<span style="color: #6699cc; font-weight: bold;">var</span> str<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #990000;">&quot;세계의끝 %26 플래시 %26 원더랜드&quot;</span>;
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span> str <span style="color: #000000;">&#41;</span>;
<span style="color: #009900;">// 출력 : 세계의끝 %26 플래시 %26 원더랜드</span>
&nbsp;
<span style="color: #009900;">// 생성자에서 변환할 text 대입</span>
<span style="color: #6699cc; font-weight: bold;">var</span> optimizer<span style="color: #000000; font-weight: bold;">:</span>OptimizeXMLString = <span style="color: #0033ff; font-weight: bold;">new</span> OptimizeXMLString<span style="color: #000000;">&#40;</span> str <span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span> optimizer.optimizing<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#41;</span>;
<span style="color: #009900;">// 출력 : 세계의끝 &amp; 플래시 &amp; 원더랜드</span>
&nbsp;
<span style="color: #009900;">// optimizing 메서드에 직접 text 를 대입하여 변경</span>
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span> optimizer.optimizing<span style="color: #000000;">&#40;</span> <span style="color: #990000;">&quot;2001 %26 스페이스 %26 오딧세이&quot;</span> <span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#41;</span>;
<span style="color: #009900;">// 출력 : 2001 &amp; 스페이스 &amp; 오딧세이</span>
&nbsp;
<span style="color: #009900;">// getter 메서드를 이용해 text 대입 ( text 내용 변경 )</span>
optimizer.<span style="color: #004993;">text</span> = <span style="color: #990000;">&quot;시계태엽 %26 오렌지&quot;</span>;
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span> optimizer.optimizing<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#41;</span>;
<span style="color: #009900;">// 출력 : 시계태엽 &amp; 오렌지</span>
&nbsp;
<span style="color: #009900;">// 변환할 단어를 추가</span>
optimizer.addReplace<span style="color: #000000;">&#40;</span> <span style="color: #990000;">&quot;오렌지&quot;</span>, <span style="color: #990000;">&quot;어린쥐&quot;</span> <span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span> optimizer.optimizing<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#41;</span>;
<span style="color: #009900;">// 출력 : 시계태엽 &amp; 어린쥐</span></pre></td></tr></table></div>

<a href="http://ufx.kr/blog/wp-content/plugins/download-monitor/download.php?id=21" title="Downloaded 203 times"><img src="http://ufx.kr/blog/wp-content/uploads/2009/07/zip_icon.gif" />&nbsp; OptimizeXMLString class</a> - replaceString.as 파일 포함
<p><center>&#8230;</center></p>
<p>이렇게 해서 String 클래스의 replace() 가 <a href="http://ufx.kr/blog/193">API 차원에서 학습</a> 된 후, <a href="http://ufx.kr/blog/338">재사용이 가능한 *.as 파일 로 만들어지고 (또는 클래스 파일로 만들어지고)</a>, 그것이 다시 확장되어 다른 클래스에서 활용되는 과정( 이 포스트 ) 을 모두 살펴보았습니다.</p>
<ol class="footnotes"><li id="footnote_0_339" class="footnote"> xml 뿐만 아니라 html, php, jsp 등 서버사이드쪽에서 사용되는 텍스트 문서 전체에 해당되기도 하죠. </li><li id="footnote_1_339" class="footnote"> OptimizeXMLString 클래스 상단에 kr.ufx.text.replaceString 파일이 import 된 것을 확인할 수 있습니다. </li></ol>]]></content:encoded>
			<wfw:commentRss>http://ufx.kr/blog/339/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

