[Etc...] [펌]TinyXML 2....

< 초간단 TinyXml 사용 방법 >

작성자 : 최흥배 ( jacking@korea.com )
문서 최종 수정일 : 2004.10.09
 
 
 
 --- 예제로 사용 될 xml 문서
<?xml version="1.0" encoding="euc-kr"?>
<MAJAK>
<LOBBY_CONTROL>
 <Option Index="1125" X="697"  Y="3" W="18"  H="15">로비 옵션</Option>
 <WindowHide Index="1160" X="732"  Y="3" W="18"  H="15">창 숨기기</WindowHide>
 <LobbyChange  Index="1027" X="32" Y="40" W="116" H="40">로비나가기</LobbyChange>
 <EnterRoom  Index="1033" X="152"  Y="40" W="116" H="40">방들어가기</EnterRoom>
 <MakeRoom Index="1011" X="276"  Y="40" W="116" H="40">방만들기</MakeRoom>
 <RoomInfo Index="1015" X="398" Y="40" W="116" H="40">관전자정보</RoomInfo>
 <RoomList Index="1002" X="28" Y="94" W="507" H="257">방리스트</RoomList>
 <UserList Index="1037" X="568" Y="102" W="216" H="233">유저리스트</UserList>
 <FindText Index="1090" X="603" Y="360" W="87"  H="20">유저찾기 입력</FindText>
 <IDFind  Index="1091" X="693" Y="360" W="20"  H="18">ID 찾기</IDFind>
 <IsWhisper  Index="1088" X="717" Y="357" W="12"  H="10">귓속말 설정</IsWhisper>
 <IsInvite  Index="1089" X="717"  Y="373" W="12"  H="10">초대 설정</IsInvite>
 <ChatInput Index="1035" X="34" Y="500" W="416" H="18">채팅 입력</ChatInput>
 <Charging Index="1005" X="461" Y="498" W="60"  H="20">신고</Charging>
 <Banner Index="2000" X="10" Y="536" W="545" H="44">배너</Banner>
 <QuickStart  Index="1084" X="573" Y="550" W="100" H="24">바로시작</QuickStart>
 <FullScreen  Index="1172" X="677" Y="550" W="100" H="24">전체화면</FullScreen>
 <Windowed  Index="1173" X="677" Y="550" W="100" H="24">창 화면</Windowed>
 <Avata X="577" Y="420" W="56"  H="111">아바타</Avata>
</LOBBY_CONTROL>

 <ROOM_CONTROL>
  <GAME_BTN Index="7000" X="706" Y="0" File=".\\data\\Gbtn_Capture.spr">화면 캡쳐</GAME_BTN>
  <GAME_BTN Index="7001" X="729" Y="2" File=".\\data\\Gbtn_WndMin.spr">방 숨기기</GAME_BTN>
  <GAME_BTN Index="7003" X="773" Y="2" File=".\\data\\Gbtn_WndClose.spr">방 나가기</GAME_BTN>
  <GAME_BTN Index="7004" X="640" Y="509" File=".\\data\\Gbtn_Entry.spr">참여</GAME_BTN>
  <GAME_BTN Index="7005" X="640" Y="509" File=".\\data\\Gbtn_Observe.spr">관전</GAME_BTN>
  <GAME_BTN Index="7017" X="682" Y="509" File=".\\data\\Gbtn_ObserveInfo.spr">관전자정보</GAME_BTN>
  <GAME_BTN Index="7006" X="745" Y="509" File=".\\data\\Gbtn_Option.spr">설정</GAME_BTN>
  <GAME_BTN Index="7007" X="640" Y="539" File=".\\data\\Gbtn_Invite.spr">초대</GAME_BTN>
  <GAME_BTN Index="7008" X="689" Y="539" File=".\\data\\Gbtn_112.spr">신고</GAME_BTN>
  <GAME_BTN Index="7009" X="738" Y="539" File=".\\data\\Gbtn_Out.spr">방 나가기</GAME_BTN>
  <GAME_BTN Index="7010" X="172" Y="578" File=".\\data\\MajakBtn_Bbong.spr">뽕</GAME_BTN>
  <GAME_BTN Index="7011" X="213" Y="578" File=".\\data\\MajakBtn_Jji.spr">찌</GAME_BTN>
  <GAME_BTN Index="7012" X="254" Y="578" File=".\\data\\MajakBtn_Kkang.spr">깡</GAME_BTN>
  <GAME_BTN Index="7013" X="295" Y="578" File=".\\data\\MajakBtn_Rich.spr">리치</GAME_BTN>
  <GAME_BTN Index="7014" X="336" Y="578" File=".\\data\\MajakBtn_Cheumo.spr">츠모</GAME_BTN>
  <GAME_BTN Index="7015" X="377" Y="578" File=".\\data\\MajakBtn_Rone.spr">론</GAME_BTN>
  <GAME_BTN Index="7016" X="418" Y="578" File=".\\data\\MajakBtn_Pass.spr">패스</GAME_BTN>
  <GAME_BTN Index="7018" X="266" Y="400" File=".\\data\\Gbtn_Start.spr">게임시작요청</GAME_BTN>
  <GAME_BTN Index="7019" X="190" Y="478" File=".\\data\\MaJakResult_Btn.spr">결과창의OK</GAME_BTN>
 </ROOM_CONTROL>

 <ROOM_LAYOUT>
  <USERINFO_POS NUM="0" X="12" Y="32">왼쪽상단</USERINFO_POS>
  <USERINFO_POS NUM="1" X="514" Y="32">오른쪽상단</USERINFO_POS>
  <USERINFO_POS NUM="2" X="563" Y="557">오른쪽하단</USERINFO_POS>
  <USERINFO_POS NUM="3" X="62" Y="562">왼쪽하단</USERINFO_POS>
 </ROOM_LAYOUT>
</MAJAK>
 
----------
 
 
1. TinyXml을 사용 할려면
 - 먼저 TinyXml 라이브러리를 다운 받은 후 빌더를 해야된다. 빌더를 할 때는 이 라이브러리를 사용할 프로젝트가
   싱글 쓰레드인지 멀티 쓰레드 인지에 따라서 tinyXml의 쓰레드 옵션을 설정 후 빌드를 해야된다.
 - 빌드가 끝나면 사용할 프로젝트에서 lib파일을 링크 시킨다.
 - tinyxml.h, tinyxml.cpp, tinyxmlerror.cpp, tinyxmlparser.cpp를 프로젝트 폴더에 포함시킨다.
 - 위 파일 중 tinyxml.h  파일만 소스에서 include 하면 된다.
 - 사용할 프로젝트가 만약 mfc 프로젝트로 stdafx 파일을 사용한다면 tinyxml.cpp, tinyxmlerror.cpp, tinyxmlparser.cpp
   의 상단에 #include "stdafx.h"를 입력해야 된다.
 - TinyXml을 사용한 후 따로 delete로 지울 필요는 없다( 즉 TiXmlNode* node; 이렇게 사용된 것들..).
 
 
 
2. xml 파일 읽기
 
 TiXmlDocument doc( "MaJak_Para.xml" );
 doc.LoadFile();
 
 TiXmlDocument m_XmlDoc;
 if( m_XmlDoc.LoadFile("MaJak_Para.xml" ) == false )
  return ERR_LOADXML;
 
 
 
3. 노드의 이동
 
 - 루트에서 시작하여 바로 Option 노드로 이동할려면
 TiXmlNode* node = doc.FirstChild("MAJAK")->FirstChild("LOBBY_CONTROL")->FirstChild( "Option" );
 
 - 루트에서 LOBBY_CONTROL노드로 이동 할려면
 node = doc.FirstChild();
 node = node->NextSibling();

 int Pos = 1
 for( i = 0; i < Pos; ++i )
 {
  node = node->FirstChild();
 }
    여기에서 Pos를 2로 하면 LOBBY_CONTROL노드의 첫번째 자식까지 이동 한다.
 
 - LOBBY_CONTROL 노드에 있는 상태에서 이 노드의 자식 중 LobbyExit 노드로 바로 갈려면
 node = node->FirstChild( "LobbyExit" );
 
 - 노드의 값을 볼려면 node->Value()로 하면 문자가 나온다.
 
 - 도큐먼트의 top 레벨의 기준으로 해서 자식 노드로 이동 할려면
 count = 0;
 for( node = doc.FirstChild();node;node = node->NextSibling())
 {
  count++;
 }
 
   
 // 아래서 위로 이동할려면
 count = 0;
 for( node = doc.LastChild();node;node = node->PreviousSibling() )
 {
  count++;
 }
 
    
    // 이터레이터를 사용
 count = 0;
 for( node = doc.IterateChildren(0);node;node = doc.IterateChildren(node) )
 {
  count++;
 }
  
 // 자식 노드 중 원하는 노드만으로의 이동도 가능하다.
 


4. 노드의 애트리뷰트 값을 얻기
 
- 현재 노드에서 모든 자식노드의 애트리뷰트 값을 얻을려면 다음과 같이 한다.
 node = node->FirstChild();
 CONTROL_RECT ControlRect;
 TiXmlElement* elem;
   
 while( node != NULL )
    {
        elem = node->ToElement();
       
  elem->Attribute( "Index", &ControlRect.index )
  elem->Attribute( "X", &ControlRect.x );
  elem->Attribute( "Y", &ControlRect.y );
  elem->Attribute( "W", &ControlRect.w );
  elem->Attribute( "H", &ControlRect.h );

  node = node->NextSibling();
 }
 
 Attribute 의  리턴 값으로 애트리뷰트 값의 문자형을 얻을 수 있다.
 
 - 애트리뷰트 이동 방법
 
 // 노드의 첫 애트리뷰트에서 마지막 애트리뷰트까지 이동
 count = 0;
 for( element = todoElement->FirstChildElement();element;element = element->NextSiblingElement() )
 {
  count++;
 }
 

5. 애트리뷰트를 얻을 수 있도록 노드 대신 element를 얻는 방법

 node = node->FirstChild();
 TiXmlElement* Rootelem = node->NextSiblingElement( _strNodeName );
 TiXmlElement* elem = Rootelem->FirstChildElement( _strSubNodeName );
 elem->Attribute( "Index", &iIndex );
 
 
 
6. 애트리뷰트의 첫버째 속성과 다음 속성을 얻는 방법
 
 TiXmlAttribute* Attribut;
 Attribut = elem->FirstAttribute()

 // 정수 및 스트링을 얻을 수 있다.
 Attribut->IntValue();   
 Attribut->Value();

 // 다음 애트리뷰트 값을 얻을렴ㄴ
 Attribut = Attribut->Next();

by 시즈모드 | 2007/08/28 12:01 | :: Study Etc...

※ 로그인 사용자만 덧글을 남길 수 있습니다.
 

◀ 이전 페이지다음 페이지 ▶