天天看點

C++使用TinyXml2解析Xml

1.

TinyXml2

簡介

TinyXml

一直是一個非常好用的

Xml

解析工具 , 最新的開源版本

TinyXml2

相對于舊版本的

TinyXml

使用更少的記憶體 , 更快 , 并且使用更少的記憶體配置設定 , 現在是所有開發的重點 , 經過良好的測試 , 是您的最佳選擇 , 除非您有維護TinyXML-1代碼的要求 ;

TinyXml2

使用類似的

API

TinyXml1

和相同的豐富的測試用例 , 但解析器的實作是完全重寫的 , 使其更适合在遊戲中使用 ;

TinyXml2

不需要

STL

, 但也降低了所有的

STL

支援 , 所有字元串都是查詢并設定為

const char *

, 這允許使用内部配置設定器 , 并保持代碼更簡單 ;

兩個解析器共同點 :

  1. 使用類似的API很簡單
  2. 基于DOM的解析器
  3. UTF-8 Unicode支援 http://en.wikipedia.org/wiki/UTF-8

TinyXml2

的優點 :

  1. 所有未來開發的重點
  2. 更少的記憶體配置設定 (1/10到1/100) , 使用更少的記憶體 (大約TinyXml1的40%) , 并且更快
  3. 無STL要求
  4. 更現代的C++ , 包括一個正确的命名空間
  5. 适當和有用的處理空白

TinyXML-1

的優點 :

  1. 支援一些

    C++

    STL

    約定 : 流和字元串
  2. 非常成熟和調試良好的代碼庫

2. 在

C++

中使用

TinyXml2

  1. C++

    中使用

    TinyXml2

    , 首先去

    Github

    官網下載下傳源碼 https://github.com/leethomason/tinyxml2 , 下載下傳

    zip

    檔案後 , 解壓出來
    C++使用TinyXml2解析Xml
  2. 将解壓出來檔案裡面的

    tinyxml2.h

    tinyxml2.cpp

    檔案拷貝到工程目錄源碼檔案夾下 , 在項目中添加這兩個檔案
    C++使用TinyXml2解析Xml
  3. 在代碼頭檔案中引入頭檔案和命名空間
    #include "tinyxml2.h"
    using namespace tinyxml2;
               
  4. 在代碼中使用

    TinyXml2

    解析文檔
    1. Xml

      文檔如下
      <?xml version="1.0"?>  
      <Group>
          <User>
              <Name>John</Name>
              <Age>18</Age>
          </User>
      </Group>  
                 
    2. 代碼中載入并解析改檔案
      XMLDocument docXml;
      XMLError errXml = docXml.LoadFile("example.xml");
      if (XML_SUCCESS == errXml)
      {
          XMLElement* elmtRoot = docXml.RootElement();
          XMLElement *elmtUser = elmtRoot->FirstChildElement("User");
          XMLElement *elmtName = elmtUser->FirstChildElement("Name");
          if (elmtName)
          {
              const char* pContent= elmtName->GetText();
              printf( "%s", pContent);
          }
          XMLElement *elmtAge = elmtName->NextSiblingElement();
          if (elmtAge)
          {
              const char* pContent= elmtAge->GetText();
              printf( "%s", pContent);
          }
      }
                 
    3. 或者直接解析字元串
      XMLDocument docXml;
      char* pXml = "<Item>Hello World</Item>";
      XMLError errXml = docXml.Parse(pXml);
      if (XML_SUCCESS == errXml)
      {
          XMLElement* elmtRoot = docXml.RootElement();
          if (elmtRoot)
          {
              const char* pContent= elmtRoot->GetText();
              printf( "%s", pContent);
          }
      }
                 
    注意 : 如果命名空間沖突的話 , 可能會導緻

    XMLDocument

    對象不明确 , 使用

    tinyxml2::XMLDocument

    來使用
個人網站: Github , 歡迎點選給星

繼續閱讀