[TinyXML] 사용해보기 - 읽어오기
개발 2007. 8. 10. 14:57336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
TimyXML 사용해보기 - xml에서 읽어오기
저자 : hanburn
날짜 : 2007.08.10
환경 : VS-2003, TinyXML 2.5.3
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>
<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>
먼저 파일에서 읽을때는,
TiXmlDocument document;
document.LoadFile(_File_Name_);
document.LoadFile(_File_Name_);
문자열로 읽을때는,
TiXmlDocument document;
document.Parse(szXML);
document.Parse(szXML);
너무 쉽다. 그런 다음에는 원하는 값을 찾아오면 된다.
먼저 노드와 엘리먼트를 가지고 오는 방법을 알아보자.
( 노드는 자식을 가지고 있는 것이고 엘리먼트는 마지막에 있는 놈이다. )
TiXmlElement* pRoot = document.FirstChildElement("MyApp");
if( NULL == pRoot ) return FALSE; // 해당 Element가 없으면 널이므로.. 체크해주는게 좋다.
if( NULL == pRoot ) return FALSE; // 해당 Element가 없으면 널이므로.. 체크해주는게 좋다.
그럼, <Welcome> 태그로 가서 데이터를 가지고 와보자.
pElement = pRoot->FirstChildElement("Message");
pElement = pElement->FirstChildElement("Welcome");
char* pAA = pElement->Value(); // pAA 은 "Welcome" 이다.
pAA = pElement->GetText(); // pAA 은 "Welcome to MyApp" 이다.
pElement = pElement->FirstChildElement("Welcome");
char* pAA = pElement->Value(); // pAA 은 "Welcome" 이다.
pAA = pElement->GetText(); // pAA 은 "Welcome to MyApp" 이다.
이번에는 다음에 windows 태그로 가서 name 속성을 읽어 와보자.
pElement = pRoot->FirstChildElement("Windows");
char* pAA = pElement->Attribute("name"); // pAA에 "MainFrame"이 들어온다.
int x;
pElement->Attribute("x", &x); // x 에 숫자 5가 들어온다.
char* pAA = pElement->Attribute("name"); // pAA에 "MainFrame"이 들어온다.
int x;
pElement->Attribute("x", &x); // x 에 숫자 5가 들어온다.
그다음에는 루프를 돌면서 child 노드를 순환하는 방법이다.
pNode = pRoot->FirstChild("sub_node");
for( pNode ; pNode ; pNode = pNode->NextSibling())
{
pAA = pNode->Value();
pElement = pNode->FirstChildElement("item");
pAA = pElement->GetText();
}
for( pNode ; pNode ; pNode = pNode->NextSibling())
{
pAA = pNode->Value();
pElement = pNode->FirstChildElement("item");
pAA = pElement->GetText();
}