您的位置:首页 > 编程语言 > C语言/C++

C++ 用TinyXml 解析xml文件的一次尝试

2011-09-12 22:07 393 查看
经过两天的摸索,现在终于会用一点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: 编译运行。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: