[TinyXML] 사용해보기 - xml로 만들기

개발 2007. 8. 10. 17:02

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

TimyXML 사용해보기 - xml로 만들기


저자 : hanburn
날짜 : 2007.08.10
환경 : VS-2003, TinyXML 2.5.3

앞에서는 xml 파일이나 xml문자열에서 파싱을 해서 원하는 정보를 뽑아오는 것을 해보았다.
그러면 이제는 반대로 설정이나 원하는 정보를 xml 형식으로 만들어 보자.
앞에서 사용한 xml을 만들어 보도록 하자

<?xml version="1.0" ?>
<MyApp>
    <!-- Settings for MyApp -->
    <Messages>
        <Welcome>Welcome to MyApp</Welcome>
        <Farewell>Thank you for using MyApp</Farewell>
    </Messages>
    <Windows>
        <Window name="MainFrame" x="5" y="15" w="400" h="250" />
    </Windows>
    <Connection ip="192.168.0.1" timeout="123.456000" />
</MyApp>


일단 xml 의 형식선언부터 시작해 보자..

TiXmlDocument doc; 
TiXmlElement* msg;
TiXmlDeclaration* decl = new TiXmlDeclaration( "1.0", "", "" ); 
doc.LinkEndChild( decl );



이렇게 하면 <?xml version="1.0" ?> 이 생성된다.
다음으로는, 서브 노드를 추가해보자.

TiXmlElement * root = new TiXmlElement( "MyApp" ); 
doc.LinkEndChild( root ); 


간단하다. 그리고 new로 생성한 TiXmlElement를 해제할 필요가 없다. 내부에서 자동으로 삭제를 해주기 때문이다. (편리하군~ ^^)
그런 다음 주석문장을 추가해 보자.

TiXmlComment * comment = new TiXmlComment();
comment->SetValue(" Settings for MyApp " ); 
root->LinkEndChild( comment ); 


주석은 TiXmlComment 클래스를 사용하면 된다. 편리하군..
다음으로는  Message 서브노드와 하위 노드및 데이터를 추가해보자

TiXmlElement * msgs = new TiXmlElement( "Messages" ); 
root->LinkEndChild( msgs ); 

msg = new TiXmlElement( "Welcome" ); 
msg->LinkEndChild( new TiXmlText( "Welcome to MyApp" )); 
msgs->LinkEndChild( msg ); 

msg = new TiXmlElement( "Farewell" ); 
msg->LinkEndChild( new TiXmlText( "Thank you for using MyApp" )); 
msgs->LinkEndChild( msg ); 



역시 쉽니다. 다음에는 노드를 추가하고 Attribute를 설정해보자
레벨을 맞추기 위해서 root의 하위로 추가 한것을 주의 깊게 봐야 한다.

TiXmlElement * windows = new TiXmlElement( "Windows" ); 
root->LinkEndChild( windows ); 

TiXmlElement * window;
window = new TiXmlElement( "Window" ); 
windows->LinkEndChild( window ); 
window->SetAttribute("name", "MainFrame");
window->SetAttribute("x", 5);
window->SetAttribute("y", 15);
window->SetAttribute("w", 400);
window->SetAttribute("h", 250);



다음은 마지막으로 Double 값 (소수점 값) 을 설정하는 예를 보자

TiXmlElement * cxn = new TiXmlElement( "Connection" ); 
root->LinkEndChild( cxn ); 
cxn->SetAttribute("ip", "192.168.0.1");
cxn->SetDoubleAttribute("timeout", 123.456); // floating point attrib



이렇게 하면 우리가 원하는 xml이 doc에 만들어 졌다. 이것을 파일로 저장할 수도 있고 xml 문자열로 만들수도 있다. 방법은 아래를..

// 파일로 저장
doc.SaveFile("text.xml");

//문자열로..
TiXmlPrinter printer;
printer.SetStreamPrinting();
Doc.Accept( &printer );
char* pAA = printer.CStr();                    // char* 를 반환한다.
std::string str = printer.Str();                  // std::string으로 반환한다.


이로써 간단하게 TinyXML의 사용법을 마칠까 한다.



: