加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

利用TinyXML解析XML

发布时间:2020-12-15 22:45:39 所属栏目:百科 来源:网络整理
导读:下载地址:TinyXML 解压缩TinyXML后,找到六个文件: tinystr.h、tinystr.cpp、tinyxml.h、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp 将这六个文件放在你的C++工程中,跟你的源文件在同一目录下。 新建一个XML文件,命名为PhoneBookData.xml : ?xml

下载地址:TinyXML

解压缩TinyXML后,找到六个文件:

tinystr.h、tinystr.cpp、tinyxml.h、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp

将这六个文件放在你的C++工程中,跟你的源文件在同一目录下。

新建一个XML文件,命名为PhoneBookData.xml :

<?xml version="1.0" encoding="utf-8"?>
<phonebook>
 <!--one item behalfs one contacted person.-->
 <item>
  <name>Richard</name>
  <addr>DongXiang</addr>
  <tel>13500000000</tel>
  <email>Richard@gmail.com</email>
 </item>
 <item>
  <name>Amanda</name>
  <addr>JinXian</addr>
  <tel>15022222111</tel>
  <email>Amanda@gmail.com</email>
 </item>
 <!--more contacted persons.-->


</phonebook>


该XML文件对应的树为:


TinyXML中主要class的类图:


TinyXML中主要类和XML文件之间的对应关系:

TiXmlBase是所有类的基类,TiXmlNode、TiXmlAttribute两个类都继承来自TiXmlBase类,其中TiXmlNode类指的是所有被<...>...</...>包括的内容,而xml中的节点又具体分为以下几方面内容,分别是声明、注释、节点以及节点间的文本,因此在TiXmlNode的基础上又衍生出这几个类TiXmlComment、TiXmlDeclaration、TiXmlDocument、TiXmlElement、TiXmlText、TiXmlUnknown,分别用来指明具体是xml中的哪一部分。TiXmlAttribute类不同于TiXmlNode,它指的是在尖括号里面的内容,像<... ***=...>,其中***就是一个属性。



新建一个C++文件,用于解析PhoneBookData.xml :(C++文件,XML文件,以及之前六个文件,都是在同一目录下)

C++文件包含两个头文件:#include "tinyxml.h" 和 #include "tinystr.h" 便可使用TinyXMl了

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

void main()
{

	TiXmlDocument doc("phonebookdata.xml");  
	doc.LoadFile();  

	//获得根元素,即phonebook  
	TiXmlElement* root = doc.RootElement();  

	printf("_______________________________________nn");  
	printf("     contacted person information      nn");  
	// trace every items below root.  
	for( TiXmlNode*  item = root->FirstChild( "item" ); item; item = item->NextSibling( "item" ) ) //NextSibling是指下一个兄弟结点
	{  
		printf("_______________________________________n");  

		//读取name
		TiXmlNode* child = item->FirstChild();  
		const char* name = child->ToElement()->GetText();  
			printf("name:%sn",name);  

		//读取address.  
		child=item->IterateChildren(child);
		const char* addr = child->ToElement()->GetText();  
			printf("addr:%sn",addr);  

		//读取tel 
		child = item->IterateChildren(child);  
		const char* tel = child->ToElement()->GetText();  
			printf("tel:%sn",tel);  

		//读取email.  
		child = item->IterateChildren(child);  
		const char* email = child->ToElement()->GetText();  
			printf("email:%sn",email);  

		printf("n");  

	}  


	system("pause");
}


解析结果为:



给XML添加信息

	// Add information to xml file and save it.  
	TiXmlElement* writeRoot = doc.RootElement();  
	TiXmlNode* newNode = new TiXmlElement("item");  
		  
	const TiXmlNode* nameNewNode = new TiXmlElement("name");  
	newNode->InsertEndChild(*nameNewNode)->InsertEndChild(TiXmlText("pipi"));  
		  
	const TiXmlNode* addrNewNode = new TiXmlElement("addr");  
	newNode->InsertEndChild(*addrNewNode)->InsertEndChild(TiXmlText("Shaanxi Xianyang"));  
		  
	const TiXmlNode* telNewNode = new TiXmlElement("tel");  
	newNode->InsertEndChild(*telNewNode)->InsertEndChild(TiXmlText("02937310627"));  
		  
	const TiXmlNode* emailNewNode = new TiXmlElement("email");  
	newNode->InsertEndChild(*emailNewNode)->InsertEndChild(TiXmlText("pipi@home.com"));  
		  
	writeRoot->InsertEndChild(*newNode);  
	doc.SaveFile(); 


XML文件变化为:

<?xml version="1.0" encoding="utf-8" ?>
<phonebook>
    <!--one item behalfs one contacted person.-->
    <item>
        <name>Richard</name>
        <addr>DongXiang</addr>
        <tel>13500000000</tel>
        <email>Richard@gmail.com</email>
    </item>
    <item>
        <name>Amanda</name>
        <addr>JinXian</addr>
        <tel>15022222111</tel>
        <email>Amanda@gmail.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文件对应的树为:



中文乱码问题:

XML文件使用的是UTF-8编码,而Windows下的控制台默认使用gb2312编码

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读