素材巴巴 > 程序开发 >

利用TinyXML解析XML

程序开发 2023-09-12 09:09:33

下载地址:TinyXML

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

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

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

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


 RichardDongXiang13500000000Richard@gmail.comAmandaJinXian15011111111Amanda@gmail.com


该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 
 #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");  //读取nameTiXmlNode* 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文件变化为:


 RichardDongXiang13500000000Richard@gmail.comAmandaJinXian15011111111Amanda@gmail.compipiShaanxi Xianyang02937310627pipi@home.com
 

该XML文件对应的树为:



中文乱码问题:

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




标签:

上一篇: npm解决node-sass python环境问题 下一篇:
素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。