C++¿ë XML ¶óÀ̺귯¸®°¡ ¸î°¡Áö ÀÖ´Ù. MSXML ¶óÀ̺귯¸®, TinyXML ¶óÀ̺귯¸®°¡ ÀÖ´Ù. ÀÛ°í ºü¸£´Ù°í ¾Ë·ÁÁø TinyXML ¶óºñºê·¯¸®¸¦ ¾Ë¾Æ º»´Ù.
³»°¡ »ç¿ëÇÑ ¹öÀüÀº TinyXML 2.5.3 ¹öÀüÀÌ´Ù. xmltet.cpp´Â ¸Þ¸ðÀå¿¡¼ ÆÄÀÏ ÀÎÄÚµùÀ» UTF-8·Î ¿°í À¯´ÏÄÚµå ÀÎÄÚµùÀ¸·Î Àç ÀúÀåÇÏ¿© ¹®ÀÚ°¡ ±úÁöÁö ¾Êµµ·Ï ÇÑ´Ù.
TinyXMLÀÇ NodeType
TinyXmlÀÇ NodeTypeÀº XMLÀÇ ³ëµå ŸÀÔ°ú ´ëºÎºÐ ºñ½Á ÇÏ´Ù. XML ¼ÀûÀ̳ª ¹®¼¸¦ º¸¸é ÁÖ¼®, ¼Ó¼º, TEXT, ElementµéÀÇ ÃÖ¼Ò´ÜÀ§´Â ³ëµåÀÌ´Ù. ¿¤¸®¸ÕÆ®¿Í ³ëµå¸¦ È¥µ¿ÇÏÁö ¾Êµµ·Ï ÇÑ´Ù. TinyXML¿¡¼´Â TiXmlElement³ëµå°¡ TiXmlNode¸¦ »ó¼ÓÇÏ°í ÀÖ´Ù.
COMMENT ³ëµå: ÁÖ¼®À» Ç¥Çö ÇÏ´Â ³ëµå
ELEMENT ³ëµå: ¿¤¸®¸ÕÆ®¸¦ Ç¥Çö ÇÏ´Â ³ëÀÌ´Ù. Test.xml¿¡¼´Â root, food, name, country°¡ ¿¤¸®¸ÕÆ®ÀÌ´Ù. (test.xml ÆÄÀÏÀº ¾Æ·¡¿¡ ³ª¿Â´Ù.)
TEXT ³ëµå: Æ®¸® ±¸Á¶»ó ÃÖ¸»´Ü ³ëµå·Î ¹®ÀÚ µ¥ÀÌÅ͸¦ Ç¥ÇöÇÏ´Â ³ëµåÀÌ´Ù.
Attribute node: TinyXml ³ëµå ŸÀÔ¿¡´Â Á¸ÀçÇÏÁö ¾ÊÁö¸¸ TinyXml¿¡¼´Â ¼Ó¼ºÀ» ¾ò¾î ¿Ã¼ö ÀÖ´Â ¸Þ¼Òµå¸¦ Á¦°øÇÑ´Ù.
³ª¸ÓÁö node ŸÀÔÀº ¹®¼¸¦ Âü°íÇÑ´Ù.
Çì´õ ÆÄÀÏ Æ÷ÇÔ
TinyXML ³»ºÎ¿¡¼ ÀÚü string Ŭ·¡½º ´ë½Å std::string Ŭ·¡½º¸¦ »ç¿ë ÇÒ·Á¸é, TIXML_USE_STLÀ» ¼±¾ðÇÑ´Ù. STL »ç¿ë¿¡ ÇÊ¿äÇÑ Çì´õ¸¦ Æ÷ÇÔ ½ÃŲ´Ù.
#define TIXML_USE_STL // TinyXMLÀÇ string´ë½Å std::stringÀ» »ç¿ëÇÒ °æ¿ì.
#include ¡°tinyxml.h¡±
#ifdef TIXML_USE_STL
#include <iostream>
#include <sstream>
using namespace std;
#else
#include <stdio.h>
#endif
|
¶óÀ̺귯¸® ¸µÅ©
TIXML_USE_STL¿¡ µû¶ó ¶óÀ̺귯¸® ¸µÅ©¸¦ ´Ù¸£°Ô ¼³Á¤ÇÑ´Ù.
//lib ÆÄÀÏ ¸µÅ©
#ifdef TIXML_USE_STL
#ifdef _DEBUG
#pragma comment(lib, "tinyxmld_STL")
#else
#pragma comment(lib, "tinyxml_STL")
#endif
#else
#ifdef _DEBUG
#pragma comment(lib, "tinyxmld")
#else
#pragma comment(lib, "tinyxml")
#endif
#endif
|
test.xml
ÀÐÀ»·Á´Â XML ÆÄÀÏÀÌ´Ù.
<?xml version="1.0" encoding="euc-kr"?>
<root>
<!--°¢±¹ÀÇ ´ëÇ¥ À½½ÄµéÀÌ´Ù.-->
<food num="1">
<name>񊎭</name>
<country>´ëÇѹα¹</country>
</food>
<food num="2">
<name>Çܹö±×</name>
<country>¹Ì±¹</country>
</food>
</root>
|
ÆÄÀÏÀ» ÅëÇØ ÀÐÀ»·Á¸é
TiXmlDocument doc;
doc.LoadFile("test.xml");
|
¹®ÀÚ¿À» ÅëÇØ ÀÐÀ»·Á¸é
TiXmlDocument doc;
doc.Parse(szXML);
|
root ¿¤¸®¸ÕÆ® ³ëµå¸¦ Àд´Ù.
TiXmlElement* rootElement = doc.FirstChildElement( "root" );
|
"root"ÀÇ ÀÚ½Ä "food" ¿¤¸®¸ÕÆ® ³ëµå¸¦ Àд´Ù.
TiXmlElement* element = doc.FirstChildElement( "root" )->FirstChildElement("food");
|
"food" ¿¤¸®¸ÕÆ® ³ëµå¸¦ ¹Ýº¹Çؼ Ãâ·Â ÇÑ´Ù.
1 while( element )
2 {
3 //Value()´Â ÇöÀç NodeÀÇ ¹®ÀÚ¿À» ³Ñ°ÜÁØ´Ù.
4 //GetText()´Â ÇöÀç Text ŸÀÔ NodeÀÇ ¹®ÀÚ¿À» ³Ñ°Ü ÁØ´Ù.
5 //element->FirstChildElement()->Value()´Â "name"À» ³Ñ°ÜÁØ´Ù.
6 const char* num = element->Attribute( "num" );
7 std::cout << "num Attribute: " << num << std::endl;
8 std::cout << "name: " << element->FirstChildElement("name")->GetText() << std::endl;
9 std::cout << "country: " << element->FirstChildElement("country")->GetText() << std::endl;
10 element = element->NextSiblingElement( "food" );
11 }
|
1: "food" ¿¤¸®¸ÕÆ®°¡ ÀÖÀ» ¶§ ±îÁö ¹Ýº¹ÇÑ´Ù.
6: "num" ¼Ó¼ºÀÇ ¹®ÀÚ¿À» ÀÐ¾î ¿Â´Ù.
¼Ó¼ºÀ» Á¤¼ö·Î ÀÐÀ»·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù. TiXmlAttribute* attr = element->FirstAttribute(); int n = attr->IntValue();
7: "name" ¿¤¸®¸ÕÆ®ÀÇ °ªÀ» Àд´Ù.
8: "country" ¿¤¸®¸ÕÆ®ÀÇ °ªÀ» Àд´Ù.
10: ´ÙÀ½ "food" ¿¤¸®¸ÕÆ®·Î À̵¿ ÇÑ´Ù.
XML Àüü ÆĽÌ
ShowXML()Àº XMLÀ» ÆĽÌÇÏ¿© º¸¿©ÁÖ´Â ÇÔ¼öÀÌ´Ù. ÄÚµå ¼³¸íÀº »ý·«....
void ShowXml(TiXmlNode *pNode)
{
if(pNode)
{
switch(pNode->Type())
{
case TiXmlNode::COMMENT:
std::cout << "COMMENT: " << pNode->Value() << std::endl;
break;
case TiXmlNode::DECLARATION:
std::cout << "DECLARATION: " << std::endl;
break;
case TiXmlNode::ELEMENT:
{
std::cout << "ELEMENT: [" << pNode->ToElement()->Value() << "]" << std::endl;
TiXmlAttribute *pAttr = pNode->ToElement()->FirstAttribute();
while(pAttr)
{
std::cout << pAttr->Name() << "=\"" << pAttr->Value() << "\"" << std::endl;
pAttr = pAttr->Next();
}
}
break;
case TiXmlNode::TEXT:
TiXmlText* pText = pNode->ToText();
if(pText)
std::cout << "TEXT: " << pText->Value() << std::endl;
break;
}
for(TiXmlNode *pNext = pNode->FirstChild(); pNext; pNext = pNext->NextSibling()) ShowXml(pNext);
}
}
|
¼Ò½º
tinyxml.zip
ÂüÁ¶:
http://hanburn.tistory.com/7
http://hanburn.tistory.com/8
|