timyxml的简单使用

#include <iostream>
#include <string>
#include <cstdio>
#include "tinyxml.h"
using namespace std;
int main()
{
	TiXmlPrinter printer;
	string filepath = "test.xml";
	TiXmlDocument doc(filepath.c_str());
	bool loadOkay = doc.LoadFile();

	if (!loadOkay)
	{	
		printf( "Could not load test file %s. Error='%s'. Exiting.\n", filepath,doc.ErrorDesc() );
		exit( 1 );
	}
	doc.Accept(&printer);
	cout << printer.CStr() << std::endl;

	TiXmlElement* root = doc.RootElement();
	for( TiXmlNode*  item = root->FirstChild("item"); item; item = item->NextSibling("item")) 
	{
		printf("_______________________________________\n");

		TiXmlNode* child = item->FirstChild();
		string name = child->ToElement()->GetText();
		if (!name.empty()) 
		{
			cout << "name = " << name << endl;
		} 

		child = item->IterateChildren(child);
		string addr = child->ToElement()->GetText();
		if (!addr.empty())
		{
			cout << "address = " << name << endl;
		} 


		child = item->IterateChildren(child);
		string tel = child->ToElement()->GetText();
		if (!tel.empty())
		{
			cout << "tel = " << tel << endl; 
		}

		child = item->IterateChildren(child);
		string email = child->ToElement()->GetText();
		if(!email.empty())
		{
			cout << "email = " << email << endl;
		} 

		cout << endl;

	}
	return 0;
}

test.xml

<?xml version="1.0" encoding="UTF-8" ?>
<phonebook>
    <!--one item behalfs one contacted person.-->
    <item>
        <name>miaomaio</name>
        <addr>Shaanxi Xi'an</addr>
        <tel>13759911917</tel>
        <email>miaomiao@home.com</email>
    </item>
    <item>
        <name>gougou</name>
        <addr>Liaoning Shenyang</addr>
        <tel>15840330481</tel>
        <email>gougou@home.com</email>
    </item>
    <!--more contacted persons.-->
    <item>
        <name>pipi</name>
        <addr>Shaanxi Xianyang</addr>
        <tel>02937310627</tel>
        <email>pipi@home.com</email>
    </item>
</phonebook>

输出:

<?xml version="1.0" encoding="UTF-8" ?>
<phonebook>
    <!--one item behalfs one contacted person.-->
    <item>
        <name>miaomaio</name>
        <addr>Shaanxi Xi'an</addr>
        <tel>13759911917</tel>
        <email>miaomiao@home.com</email>
    </item>
    <item>
        <name>gougou</name>
        <addr>Liaoning Shenyang</addr>
        <tel>15840330481</tel>
        <email>gougou@home.com</email>
    </item>
    <!--more contacted persons.-->
    <item>
        <name>pipi</name>
        <addr>Shaanxi Xianyang</addr>
        <tel>02937310627</tel>
        <email>pipi@home.com</email>
    </item>
</phonebook>

_______________________________________
name = miaomaio
address = miaomaio
tel = 13759911917
email = miaomiao@home.com

_______________________________________
name = gougou
address = gougou
tel = 15840330481
email = gougou@home.com

_______________________________________
name = pipi
address = pipi
tel = 02937310627
email = pipi@home.com

请按任意键继续. . .



<?xml version="1.0" encoding="GB2312" ?>
<Class name="计算机软件班">

    <Students>

    <student name="张三" studentNo="13031001" sex="男" age="22">

    <phone>88208888</phone>

    <address>西安市太白南路二号</address>

    </student>

    <student name="李四" studentNo="13031002" sex="男" age="20">

    <phone>88206666</phone>

    <address>西安市光华路</address>

    </student>

    </Students>

    </Class>

#include <iostream>
#include <string>
#include "tinyxml.h"
#pragma comment(lib, "tinyxml.lib")
using std::string;
int main()
{
	TiXmlPrinter printer;
	TiXmlDocument* myDocument = new TiXmlDocument();
	myDocument->LoadFile("test.xml");
	myDocument->Accept(&printer);
	//std::cout << printer.CStr() << std::endl;

	TiXmlElement* rootElement = myDocument->RootElement();  //Class

	std::cout << rootElement->Value() << ": ";
	std::cout << rootElement->FirstAttribute()->Value() << std::endl;
	std ::cout << "-----------------------------------------------" << std::endl;

	TiXmlElement* studentsElement = rootElement->FirstChildElement();  //Students
	TiXmlElement* studentElement = studentsElement->FirstChildElement();  //Student
	while ( studentElement ) 
	{
		TiXmlAttribute* attributeOfStudent = studentElement->FirstAttribute();  //获得student的name属性
		while ( attributeOfStudent ) 
		{
			std::cout << attributeOfStudent->Name() << " : " << attributeOfStudent->Value() << std::endl;
			attributeOfStudent = attributeOfStudent->Next();
		}
		TiXmlElement* phoneElement = studentElement->FirstChildElement();//获得student的phone元素
		std::cout << "phone" << " : " << phoneElement->GetText() << std::endl;

		TiXmlElement* addressElement = phoneElement->NextSiblingElement();
		std::cout << "address" << " : " << addressElement->GetText() << std::endl;
		std ::cout << "-----------------------------------------------" << std::endl;
		studentElement = studentElement->NextSiblingElement();
	}
	return 0;
}

输出:

Class: 计算机软件班
-----------------------------------------------
name : 张三
studentNo : 13031001
sex : 男
age : 22
phone : 88208888
address : 西安市太白南路二号
-----------------------------------------------
name : 李四
studentNo : 13031002
sex : 男
age : 20
phone : 88206666
address : 西安市光华路
-----------------------------------------------
请按任意键继续. . .


posted @ 2013-03-30 14:59  N3verL4nd  阅读(184)  评论(0编辑  收藏  举报