Loading
2010. 5. 10. 19:39 - lazykuna

[Flash] AS 2.0에서 XML 파일 읽어들이기

p
var myXML:XML;

function loadXml (page, func) {
    myXML = new XML();
    myXML.ignoreWhite=true;
    myXML.load(page);
    myXML.onLoad = func;
}

function parseXml (success) {
    if (!success)
    {
          // 로드 실패시 처리할 부분 ...
    } else {
          // 로드 성공시 처리할 부분 ...
    }
}

loadXml (url, parseXml);

활용법은 간단하다. url만 입력하고 loadXml을 호출하면 알아서 해 주니깐.

로드한 XML을 파싱하는 방법은 다음과 같다.

// 맨 첫번째 자식노드의 내부 코드를 가져온다
myXML.childNodes[0];


예를 들자면,

- data.xml -
<?xml version="1.0" encoding="UTF-8"?>
<test>
<item>데이터 1</item>
<item>데이터 2</item>
</test>


에서 위 코드를 실행하면, 결과값은 <test> ~ </test> 사이의 값이 나온다. 즉,
<item>데이터 1</item>
<item>데이터 2</item>
이 된다.

내부 값을 가져오기 위해서는, childNodes 를 한번 더 써준다.

trace(myXML.childNodes[0].childNodes[0]);
 -> "
<item>데이터 1</item>"

trace
(myXML.childNodes[0].childNodes[1]);
 -> "
<item>데이터 2</item>"

trace(myXML.childNodes[0].childNodes[0].childNodes[0]);
 -> "
데이터 1"

trace(myXML.childNodes[0].childNodes[1].childNodes[0]);
 -> "
데이터 2"


다른 메서드로는 firstChild / lastChild과 nodeName과 nodeValue, parentNode, attributes 등이 존재한다. 대부분의 속성들은 이름만 봐도 의미를 파악할 수 있지만, nodeName과 attributes는 그 의미가 중요하므로 직접 살펴본다. [자세한 정보는 http://help.adobe.com/ko_KR/AS3LCR/Flash_10.0/flash/xml/XMLNode.html을 참조]

*nodeName의 활용 예이다.
trace(myXML.childNodes[0].childNodes[0].nodeName);
 -> "
item"

trace
(myXML.childNodes[0].nodeName);
 -> "
test"

.. 너무 간단해서 쓸 게 없네 (..)


*attributes는 해당 XML 자식 값을 가져오거나 지정할 때 쓴다.
ps. 그런데 항상 작동하는 건 아닌 것 같다. 이유는 잘 모르겠지만 ...
trace(myXML.attributes.test);
 -> "<item>테스트 1</item><item>테스트 2</item>
"