관리 메뉴

nkdk의 세상

XML오브젝트 생성하는 방법과 콘트롤 하는 방법 본문

My Programing/Flex&AIR

XML오브젝트 생성하는 방법과 콘트롤 하는 방법

nkdk 2008. 5. 26. 20:41
이번에는 XML오브젝트에 관련된 것에 대해서 알려드리겠습니다. 많은 응용이 되겠네요.
일단 XML이 뭔지 잘 모르시는 분은 개념부터 잡고 들어가시는게 좋을 것 같습니다. 너무나도 쉽게 데이타를
주고 받을 수 있게 설정을 할 수 있기 때문에 매우 유용하다고 생각되네요.

XML오브젝트 생성하는 방법
var example:XML =
 <gamescore> <username>{username}</username> <score>{score}</score> </gamescore>
바로 이렇게 구성할 수도 있고 스트링 형식으로 생성하는 것도 가능하다.

var str:String =
 "<gamescore> <username>{username}</username> <score>{score}</score> </gamescore>";
var example:XML = new XML(str);

다음과 같이 e4x방식으로 제작이 가능하다. E4X는 노드의 추가및 삭제와 같은 조작에 사용하는 것이 적합하다.
확인을 하기 위해서는 trace방법이 아닌 text필드를 만들어서 그곳에 추가 하는 방식으로 추가하면 됩니다.

XML에 요소 추가하기
var example:XML = <example />;
example.newElement = <newElement />;
이런식으로 하면 example쪽에 newElement라는 부분이 추가가 된다.
또한 해당되는 노드를 변경하고 싶을 시 예를 들면
<example><element1 /><element2 /></example> 인 경우에는
example.element2=<element1 />;  라고 하면
<example><element1 /><element1 /></example> 라고 변경된다.

약간 다른 추가 방법
요소명에 대해서 정의를 해 줄 수 있는데
example.newElement = <newElement />; 이 부분을
example["user"+id] = "";
라는 식으로 id값을 유기적으로 줄 수도 있다.

이미 있는 노드안에 노드 넣는 방법 (앞에, 뒤에)
example.insertChildAfter(example.new2, "<oneone />");
example.insertChildBeforer(example.new2, "<oneone />");

XML오브젝트에 텍스트 노드 추가하기
example=["a", undefined, "b", "c", null, 7, false];
이렇게 하면 노드상에
<example><abc>a,,b,c,,7,false</abc>와 같이 나온다.

XML요소에 속성 추가하기
elementNode.@attributeName = "value";
다음과 같이 @를 붙여서 속성을 추가한다.
example.@number = 12.1;
example.@string = "example"; 이렇게 설정을 하면
<example number="12.1" string="example"> 이런식으로 설정이 된다.
이렇게 속성을 추가할 때에도 노드를 추가할 때와 마찬가지로
element.@["color"+num] = "red"; 라는 식으로 추가하는 것이 가능하다.

XML트리의 요소를 읽는 방법
 for each(var element:XML in menu.elements())
   {
    texts.text += element.@label+" ";
   }
label에 해당하는 속성의 것들을 출력 시켜 준다 하지만 여기서 문제가 있다. 모든 노드 label을 가져오는 것이 아니라 menu의 바로 연결되 있는 노드만 가져 온다는 점이다. 이 점을 해결하기 위해 다음과 같이 펑션을 만들어 준다.

function walk(node:XML):void
  {
   for each(var element:XML in node.elements())
   {
    texts.text += element.@label+" ";
   }
   walk(element);
  }

다음과 같이 for문을 돌리면 속해 있는 모든 label의 것들을 출력한다.

이름으로 요소 찾기
xml구조에서는 노드의 이름으로 요소를 찾아야 한다.
var author:XML = <author><name><firstname>Apple</firstname></name></author>;
textbox.text += author.name.firstname;

이런식으로 가져 올 수 잇는데 이런것은 노드가 여러개 있을 경우에 그 자료를 모두 가져 오고 싶을 시에는
textbox.text += author..firstname;
이라고 작성을 하면 각 노드에 접근하여 값을 가져온다.
각 노드에 item[0] 이런식으로 해당되는 숫자의 인덱스로 접근하는 것도 가능하다.
또한 요소의 개수를 반환하고 싶을 경우에는 다음과 같이 한다.
items.item.length(); 와 같이 하면 개수를 반환한다.

또한 true와 false를 구분해 주기 위하여 사용할 수가 있는데 그 방법은
var bool:Boolean = Boolean(example.bool); rhk rkxdms tlrdmfh go wnsek.
int 형으로 변환시에는 다음과 같이 해 준다.
var integer:int = int(example.integer);
number형 즉.. float 형식은
var number:Number = example.number;

요소의 속성 읽어오기
var attributes:XMLList = fruit.attributes();
trace(attributes[0]);
trace(attributes[1]);

for each(var attribute:XML in fruit.attributes())
{
trace(attributes.name()+attribute.toString());
}
다음과 같이 하면 모든 속성에 접근하여 해당 속성명과 해당하는 값을 가져온다.

특정 요소 혹은 속성을 삭제 하기
delete키워드를 사용해 삭제한다.
delete example.fruit.@color;
delete example.diary;
delete example.vegetable.text()[0]; 요소에서 텍스트 노드 제거