관리 메뉴

nkdk의 세상

AS3.0의 XML에 활용 2부 본문

My Programing/ActionScript

AS3.0의 XML에 활용 2부

nkdk 2008. 3. 9. 22:27
자 다음에 내용에 이어서..

var message:XML =
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<soap:Body>

<m:GetLastTradePrice xmlns:m="http://mycompany.com/stocks">
<symbol>DIS</symbol>
</m:GetLastTradePrice>

</soap:Body>
</soap:Envelope>;

var soap:Namespace = new Namespace("http://schemas.xmlsoap.org/soap/envelope/");
var encodingStyle:XMLList;
encodingStyle= message.@soap::encodingStyle;
trace("결과1",encodingStyle.toXMLString());

encodingStyle= message.soap::Body;
trace("결과2",encodingStyle.toXMLString());

encodingStyle= message.soap::["Body"];
trace("결과3",encodingStyle.toXMLString());

trace("localName::",message.localName());
trace("namespace.prefix::",message.namespace().prefix);
trace("namespace.uri::",message.namespace().uri);

trace된 결과 값을 보고 유추 하시기 바랍니다. 설명을 굳이 안 드려도 될 것 같네요.

자 다음은 XML Initialiser인데 {} 라는 흥미로운 것 입니다.
예제:

var tagname:String = "name";
var attributename:String = "id";
var attributevalue:Number = 5;
var content:String = "Fred";
var mX :XML=
<{tagname}
{attributename}={attributevalue}>
{content}
</{tagname}>;

trace(mX.toXMLString());

실행해 보시고 내용을 이해해 보시면 알 듯 하네요. 해당되는 var를 XML에 넣는 거네요 ^^


for (var i:Number = 0; i< 10; i++)
e[i] = < employee id={i}>
<name>{names[i].toUpperCase()}</name>
<age>{ages[i]}</age>
</employee>;

이와 같은 강력함이 보이는 구문도 만드는 것이 가능합니다.

이번에는 <> </> 에 대해 설명드릴께요.. 해당 XML을 초기화 해주는 명령어 입니다.

var docfrag:XMLList = <><data>data1</data></>;
var emplist:XMLList =
<>
<data>data2</data>
</>;

trace("결과1",docfrag);
trace("결과2",emplist);
trace("결과3",docfrag+emplist);

이와 같이 씁니다.

__________________________________

이번에는 Property Accessors 에 대해 알아 볼까요.

var order:XML =
<order id="test">
<data>data1</data>
<data>data2</data>
</order>;

trace("결과1",order.data[0]);
trace("결과2",order["data"][0]);
trace("결과3",order.@id);
trace("결과4",order["@id"]);

한눈에 팍팍 와 닿죠?
하는 김에 XML 끝장 내버리겠습니다.


이번에는 Function Calls(괄호)

var rectangle:XML =
<rectangle>
<x>50</x>
<y>75</y>
<length>20</length>
<width>30</width>
</rectangle>;

var numRectangles:Number = rectangle.length();
var rectangleLength:Number = rectangle.length;
rectangle.length = 50;

trace(numRectangles,rectangleLength,rectangle.length);

내용을 보시고 이해 하시고요.

XML Filtering Predicate Operator .()
.(Boolean 데이터 형의 표현식)
표현식을 사용하여 데이터를 필터링 합니다. 꼭 불린으로 리턴해야 함

var e:XML=<employees>

<employee id="0">
<name>ho0</name>
</employee>
<employee id="1">
<name>ho1</name>
</employee>
<employee id="2">
<name>ho2</name>
</employee>
</employees>

var ho0:XMLList = e.employee.(name=="ho0");
var twoemployees:XMLList = e.employee.(@id == 0 || @id == 1);
var emp:XMLList = e.employee.(@id == 1).name;

trace("결과1", ho0);
trace("결과2", twoemployees);
trace("결과2", emp);

이런식으로 작성합니다.
훨씬 코딩이 간단해 집니다.

delete Operator에 대하여..

delete order.customer.address; // 커스터머의 모든 element address 제거
delete order.customer.@id; // 커스터머의 모든 attribute id 제거
delete order.customer.price[0]; // 첫 번째 price Element 제거
delete order.customer.item; // 모든 item Element 제거

특정 Element 나 Attribute 를 제거 할 때 사용합니다.

XMLSocket 클래스

TCP/IP기반의 통신 엔진입니다. XMLSocket 를 본격적으로 사용하기 위해서는 XMLServer 를 선택하고 설치하는 과정이 있지만 여기에서는 개념만 짚고 넘어 갑니다. 여기에서는 간단한 코딩만 짚고 넘어 갑니다.

XMLSocket 인스턴스 생성
var socket:XMLSocket = new XMLSocket();

Event Listener 설정
socket.addEventListener(Event.CLOSE, closeHandler);
socket.addEventListener(Event.CONNECT, connectHandler);
socket.addEventListener(DataEvent.DATA, dataHandler);
socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
socket.addEventListener(ProgressEvent.PROGRESS, progressHandler);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);

XMLServer로 접속 시도 TCP/IP서버 이면 모두 접속 가능
socket.connect("localhost", 808);
접속 성공하면 데이터 전송
socket.send(data);
모든 처리가 끝나면 접속 해제
socket.close();

이로써 xml파트는 마치도록 하겠습니다 ^^