[TinyXML] 사용해보기 - xml로 만들기
개발 2007. 8. 10. 17:02TimyXML 사용해보기 - xml로 만들기
저자 : hanburn
날짜 : 2007.08.10
환경 : VS-2003, TinyXML 2.5.3
앞에서는 xml 파일이나 xml문자열에서 파싱을 해서 원하는 정보를 뽑아오는 것을 해보았다.
그러면 이제는 반대로 설정이나 원하는 정보를 xml 형식으로 만들어 보자.
앞에서 사용한 xml을 만들어 보도록 하자
<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 의 형식선언부터 시작해 보자..
TiXmlElement* msg;
TiXmlDeclaration* decl = new TiXmlDeclaration( "1.0", "", "" );
doc.LinkEndChild( decl );
이렇게 하면 <?xml version="1.0" ?> 이 생성된다.
다음으로는, 서브 노드를 추가해보자.
doc.LinkEndChild( root );
간단하다. 그리고 new로 생성한 TiXmlElement를 해제할 필요가 없다. 내부에서 자동으로 삭제를 해주기 때문이다. (편리하군~ ^^)
그런 다음 주석문장을 추가해 보자.
comment->SetValue(" Settings for MyApp " );
root->LinkEndChild( comment );
주석은 TiXmlComment 클래스를 사용하면 된다. 편리하군..
다음으로는 Message 서브노드와 하위 노드및 데이터를 추가해보자
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의 하위로 추가 한것을 주의 깊게 봐야 한다.
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 값 (소수점 값) 을 설정하는 예를 보자
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의 사용법을 마칠까 한다.