如何使用C++解析XML文件?

【本来是想明天在写的,拒绝拖延,写完再睡,干】
tinyxml库下载地址:
http://sourceforge.net/projects/tinyxml/files/

将下图中红框内的文件,导入到我们的工程中
tinyxml库文件
创建我们自己的工程文件,我的是main.cpp(上图)
工程代码如下:

#include "tinyxml.h"
#include <iostream>
//这是似乎没啥用,我注释掉,代码依然可以运行
#include <cstring>
using namespace std;

void printTestXml() {
	int i = 1;
	//把xml文件所在绝对路径赋值给string变量
   string filefullPath = "D:/Code/tinyxml/conf/test.xml";
   //创建文件对象  
   TiXmlDocument * myDocument = new TiXmlDocument(filefullPath.c_str());
   //加载文件
   myDocument->LoadFile();
   //获取文件根节点
   TiXmlElement* RootElement = myDocument->RootElement();
   TiXmlAttribute* scAttr = RootElement->FirstAttribute();
   //输出根节点的名称
   cout << RootElement->Value() << " ";
   //输出根节点的属性
   cout << scAttr->Name() << " : " << scAttr->Value() << endl;

   for (TiXmlElement* classElement = RootElement->FirstChildElement();
	   NULL != classElement;
	   classElement = classElement->NextSiblingElement())
   {
	   //输出class元素的属性
	   TiXmlAttribute* CAttr = classElement->FirstAttribute();
	   while (CAttr != NULL)
	   {
		   cout << "class " <<CAttr->Name() << ":" << CAttr->Value();
		   CAttr = CAttr->Next();
	   }
	   cout << endl;
	   cout << "=====================================\n";
		
	   //输出student的属性和内容
	   for (TiXmlElement* stuElement = classElement->FirstChildElement();
		   NULL != stuElement;
		   stuElement = stuElement->NextSiblingElement())
	   {
		   //输出student的属性
		   cout << stuElement->Value() << "NO." << i << " ";
		   i += 1;
		   TiXmlAttribute* pAttr = stuElement->FirstAttribute();
		   while (NULL != pAttr)
		   {
			   cout << pAttr->Name() << ":" << pAttr->Value() << " ";
			   pAttr = pAttr->Next();
		   }
		   cout << endl;
		   //输出student的内容
		   for (TiXmlElement* sonElement = stuElement->FirstChildElement();
			   NULL != sonElement;
			   sonElement = sonElement->NextSiblingElement())
		   {
			   cout << sonElement->Value() << ":";
			   cout << sonElement->FirstChild()->Value() << endl;
		   }
		   if (NULL != stuElement->NextSiblingElement())
		   {
			   cout << endl;
		   }
	   }
	   i = 1;
	   cout << "--------------------------------------\n";
	   cout << endl;
   }
}

int main()
{
	printTestXml();
    system("pause");
    return 0;
}

我的xml:

<?xml version="1.0" encoding="UTF-8"?>
<School name="NO.1School">
    <Class name = "C++">  
        <Student name="tinyxml" number="123">  
            <email>tinyxml@163.com</email>  
            <address>CN</address>           
        </Student>  

        <Student name="jsoncpp" number="456">  
            <email>jsoncpp@gmail.com</email>  
            <address>US</address>           
        </Student>
    </Class> 

    <Class name = "java">  
        <Student name="tiny" number="12">  
            <email>tiny@163.com</email>  
            <address>china</address>           
        </Student>  

        <Student name="json" number="45">  
            <email>json@gmail.com</email>  
            <address>US</address>           
        </Student>
    </Class> 
</School>

解析结果:
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值