博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

TinyXml 解析xml文件

Posted on 2011-04-10 21:46  tianya10319  阅读(517)  评论(0编辑  收藏  举报

转载:http://my.oschina.net/Davy2010/blog/11454

   经过两天的摸索,现在终于会用一点Tinyxml了,现将过程记下。

   首先下载我自己整理的 Tinyxml 的六个通用文件(头文件和实现文件),下载地址:

            http://www.vdisk.cn/down/index/5804602A5578

   Step 1: 用 Vs 新建一个win32 console 工程。

   Step 2: 在工程里添加进那六个文件(tinystr.h  tinyxml.h  和 tinystr.cpp  tinyxml.cpp  tinyxmlerror.cpp tinyxmlparser.cpp).

   Step 3: Xml文件内容,保存为"test.xml", 放在工程文件夹下。

     <?xml version="1.0" encoding="GB18030" ?>
<Menus>
  <Menu title="常用网址">
    <item name="天下网" url="http://www.netskycn.com" id="1"/>
    <item name="天下网生活论坛" url="http://life.netskycn.com" id="2"/>
    <item name="csdn" url="http://www.csdn.net" id="3"/>
    <item name="我的博客" url="http://blog.csdn.net/zhoufoxcn" id="4"/>
    <item name="百度" url="http://www.baidu.com" id="5"/>
    <item name="Google" url="http://www.google.cn" id="6"/>
    <item name="微软" url="http://www.microsoft.com" id="7"/>
  </Menu>
  <Menu title="娱乐网址">
    <item name="奇虎" url="http://www.qihoo.com" id="12"/>
    <item name="网易" url="http://www.163.com" id="13"/>
    <item name="天涯" url="http://www.tianya.cn" id="14"/>
  </Menu>
  <Menu title="安全网址">
    <item name="360" url="http://www.safe360.com" id="15"/>
    <item name="瑞星" url="http://www.rising.com.cn" id="16"/> 
  </Menu>
</Menus>

  
  Step 4: 代码
// XMLParse_test_3_using_LoadFile.cpp : 定义控制台应用程序的入口点。
//

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

int _tmain(int argc, _TCHAR* argv[])
{
	// step 1 : Load the xml file
	string fileXml = "test2.xml";
	TiXmlDocument doc( fileXml.c_str() );
	doc.LoadFile();

	// step 2 (optional) : // Print the file's content
	doc.Print(); 
    // step 3 : Parse the xml file
	if ( !doc.Parse( fileXml.c_str() ) )
	{
		cout << doc.ErrorDesc() << endl;
	}	

	// step 3.1 : Get the RootElement
	const TiXmlElement *root = doc.RootElement();
	//	 Testing 1
	cout << endl << " The root element is : " << root->Value() << endl << endl;

	// step 3.2 : Get RootElement's ChildElement
	cout << "Menu : \n";
	for ( const TiXmlNode *child = root->FirstChild(); child; child = child->NextSibling() )
	{
		// Read the ChildElement
		if ( ( child->Type() == TiXmlNode::ELEMENT ) && ( !strcmp( child->Value(), "Menu" ) ) )
		{
			const TiXmlElement *child_menu = ( const TiXmlElement * ) child;
			string url, id, name;
			// Get the attribute_title
			string attribute_title;
			attribute_title = child_menu->Attribute("title");
			// Testing 2
			cout << " The title is : " << attribute_title << endl;

			// Get child_child_element_item s
			cout << "   Item : \n";
			for ( const TiXmlNode *child_child_item =  child_menu->FirstChild(); 
				    child_child_item; 
				    child_child_item = child_child_item->NextSibling() )
			{
				if ( child_child_item->Type() == TiXmlNode::ELEMENT )
				{
					const TiXmlElement *child_child_element_item = ( const TiXmlElement * )child_child_item;
					if ( !strcmp( child_child_element_item->Value(), "item" ) )
					{
						name = child_child_element_item->Attribute( "name" );
						url = child_child_element_item->Attribute( "url" );
						id = child_child_element_item->Attribute( "id" );
					}
				}	
				cout << "\tname : "	<< name << endl
					<< "\turl : "	<< url << endl
					<< "\tid : " << id << endl << endl;
			}	
		}
	}

	system("pause");
	return 0;
}

   
   Step 5: 编译运行。