TinyXML 간단 사용법

c# 처럼 손쉽게 XML 을 다룰 수는 없을까 해서 찾은 라이브러리 이다.




*소스코드와 Lib 파일

물론 소스코드를 직접 빌드해도 된다. VS 2012 기준으로 테스트 프로젝트를 제외하고 본래 라이브러리는 빌드가 잘 된다.


소스코드

tinyxml_2_6_2.zip



이미 빌드된 Lib


tinyxml.lib




* 프로젝트 설정


헤더파일 폴더 :  VC++ Directories -> Include Directories

lib 파일 폴더 : VC++ Directories -> Library Directories




* 만들고 읽고 검색하기 예제



// TinyXmlTest1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <tinyxml.h>
#include <iostream>
#include <string>
using namespace std;





/**
 XML 만들기
*/

TiXmlElement* GetBookElement(string title , string author)
{
    TiXmlElement * book = new TiXmlElement("book");
    book->SetAttribute("title" , title.c_str());
    book->SetAttribute("author" , author.c_str());
    return book;
}

TiXmlDocument * MakeXML()
{
    TiXmlDocument* doc = new TiXmlDocument();

    TiXmlElement* root = new TiXmlElement("root");
    
    TiXmlElement* category = new TiXmlElement("category");
    category->LinkEndChild(new TiXmlText("English books"));
    
    TiXmlElement* items = new TiXmlElement("items");
    items->LinkEndChild(GetBookElement("XML Developer's Guide" , "Gambardella, Matthew"));
    items->LinkEndChild(GetBookElement("Midnight Rain" , "Ralls, Kim"));
    items->LinkEndChild(GetBookElement("Corets, Eva" , "Maeve Ascendant"));

    root->LinkEndChild(category);
    root->LinkEndChild(items);
    doc->LinkEndChild(root);

    return doc;
}









int _tmain(int argc, _TCHAR* argv[])
{

    TiXmlDocument* book_xml = MakeXML();
    book_xml->SaveFile("book.xml");                 //파일로 저장

    TiXmlPrinter * xmlToStr = new TiXmlPrinter();   //xml 을 출력
    book_xml->Accept(xmlToStr);


    cout << "=== Generated xml ===" << endl;
    cout << xmlToStr->CStr() << endl;
    cout << endl;
    cout << endl;
    
    string xml_str = xmlToStr->CStr();
    delete xmlToStr;

    
/**
 XML 로드 및 검색
*/
    TiXmlDocument readDoc ;

    
    //readDoc.Parse(xml_str.c_str());   //문자열로 파싱 {xmlToStr->CStr() 을 바로 읽으면 Triming 이 안되서 그런지 오류남}
    readDoc.LoadFile("book.xml");       //파일 읽기

    xmlToStr = new TiXmlPrinter();      
    readDoc.Accept(xmlToStr);

    cout << "=== Read xml ===" << endl;
    cout << xmlToStr->CStr() << endl;
    cout << endl;
    cout << endl;
    delete xmlToStr;



    TiXmlHandle handle(&readDoc);       // 검색을 위하여 핸들 생성
    TiXmlElement* category = handle.FirstChild("root").FirstChild("category").ToElement(); //검색 위치 지정
    cout << "Category : " << category->GetText() << endl; // 추출

    /** book 엘리먼트가 여러개로 나열 되어 있다. 부모 노드를 지정 하는것이 아니다.**/
    TiXmlElement* book = handle.FirstChild("root").FirstChild("items").FirstChild("book").ToElement(); //검색 위치 지정
    

    for(book ; book ; book = book->NextSiblingElement()) //for 문 문법을 유의해서 볼 것!
    {
        cout << "---------------------------------" << endl;
        cout<< "title: " << book->Attribute("title") << endl;
        cout<< "author: " << book->Attribute("author") << endl;
    }
    cout << endl;
    cout << endl;


    return 0;
}


Yamecoder 야매코더_
C++(oF) 2015.04.20 19:53
Powerd by Tistory, designed by criuce
rss