C++使用TinyXML解析XML

  偶尔在英雄会上看到这个问题,自己编了好久没有编出来,下面是地址:http://hero.pongo.cn/。于是就开始在网上搜,大部分都是使用外加的类库来实现,于是就先试着网上的说法,不管怎么实现的,先做出来再说。

先下载TinyXML,百度一下就行,下载下来解压,里面有2个头文件和4个cpp文件,一起加到工程里面,如图所示



       xmlTest.cpp是包含主函数的文件,下面直接上代码,很简单,不管怎么样,总算是实现了,虽然题目要求不使用外加类库实现,过段时间等题解出来我再上来更新不加外库实现的方法。

<School name="软件学院">  
    <Class name = "C++">  
        <Student name="tinyxml" number="123">  
            <email>tinyxml@163.com</email>  
            <address>中国</address>           
        </Student>  
        <Student name="jsoncpp" number="456">  
            <email>jsoncpp@gmail.com</email>  
            <address>美国</address>           
        </Student>  
    </Class>  
</School>

以上是要读取xml文件,下面的是xmlTest.cpp。

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


void readSchoolXml() {
	using namespace std;
	const char * xmlFile = "school.xml";
	TiXmlDocument doc;                              
	if (doc.LoadFile(xmlFile)) {
		doc.Print();
	} else {
		cout << "can not parse school.xml" << endl;
		return;
	}
	TiXmlElement* rootElement = doc.RootElement();  //School元素  
	TiXmlElement* classElement = rootElement->FirstChildElement();  // Class元素
	TiXmlElement* studentElement = classElement->FirstChildElement();  //Students  
	for (; studentElement != NULL; studentElement = studentElement->NextSiblingElement() ) {
		TiXmlAttribute* attributeOfStudent = studentElement->FirstAttribute();  //获得student的name属性  
		for (;attributeOfStudent != NULL; attributeOfStudent = attributeOfStudent->Next() ) {
			cout << attributeOfStudent->Name() << " : " << attributeOfStudent->Value() << std::endl;       
		}                                 

		TiXmlElement* studentContactElement = studentElement->FirstChildElement();//获得student的第一个联系方式 
		for (; studentContactElement != NULL; studentContactElement = studentContactElement->NextSiblingElement() ) {
			string contactType = studentContactElement->Value();
			string contactValue = studentContactElement->GetText();
			cout << contactType  << " : " << contactValue << std::endl;           
		}   

	} 
}

int main(){
	readSchoolXml();
	system("pause");
	return 1;
}
运行结果界面:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值