TinyXML Read

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