解析XML格式的配置文件

前端之家收集整理的这篇文章主要介绍了解析XML格式的配置文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


本人是幼年程序猿,至今尚未成型


在以前的编程中(简直就是闹着玩的)用到的一些外部的参数,要不是在程序执行的时候在命令行中传进去,要不然就是用宏定义。之后才发现人家都是程序读取配置文件,只要程序编译好,需要时只要更改配置文件里的配置选项即可,配置文件一般是xml格式。

tinyxml是一款好用的C++开源的解析工具,在使用前需要将tinystr.cpp,tinyxml.cpp,tinyxmlerror.cpp,tinyxmlparser.cpp,tinyxml.htinystr.h着六个文件拷到你的工程的目录下,需要的话可以在http://sourceforge.net/projects/tinyxml/下载。



No Ex You C 个 J8 写个例子吧

Ex1:info.xml

<?xmlversion="1.0"encoding="gb2312?>
<Schoolname="softengine">
<Classname="C++">
<Studentname="andy"number="36"phone="123456789">
<email>andy@163.com</email>
<address>Beijing</address>
<sex>man</sex>
</Student>
</Class>
</School>

Test_XML.cpp

#include<iostream>
#include<string>
#include<map>
#include"tinystr.h"
#include"tinyxml.h"

usingnamespacestd;

voidReadSchoolXml(constchar*Conf_File_Name)
{
TiXmlDocumentdoc;
if(!doc.LoadFile(Conf_File_Name)
{
cout<<"LoadFile失败"<<endl;
return;
}

//root节点
TiXmlElement*rootElement=doc.FirstChild("School");
cout<<"rootName="<<rootElement->Value()<<endl;

//class节点
TiXmlElement*classElement=rootElement->FirstChildElement();
cout<<"classElement="<<classElement->Value()<<endl;

//student节点
TiXmlElement*studentElement=classElement->FirstChildElement();
cout<<"studentElment="<<studentElement->Value()<<endl;

for(;studentElement!=NULL;studentElement=studentElement->NextSiblingElement())
{
TiXmlAttribute*attributeOfStudent=studentElement->FirstAttribute();
for(;arrtibuteOfStudent!=NULL;attributeOfStudent=attributeOfStudent->Next())
{
//cout<<attributeOfStudent->Name()<<"="<<attributeOfStudent->Value()<<endl;
stringstr1=attributeOfStudent->Name();
stringstr2=attributeOfStudent->Value();

Map[str1]=str2;
}

TiXmlElement*studentContactElement=studentElement->FirstChildElement();
for(;studentContactElement!=NULL;studentContactElement=studentContactElement->NextSiblingElement())
{
stringstr1=studentContactElement->Value();
stringstr2=studentContactElement()->GetText();

Map[str1]=str2;
}
}
}

intmain(intargc,char**argv)
{
if(argc<1)
{
cout<<"缺少参数"<<endl;
return-1;
}

map<string,string>Map
ReadSchoolXml(argv[1],Map);

map<string,string>::iteratorit;
for(it=Map.begin();it!=Map.end();it++)
{
cout<<it->first<<"="<<it->second<<endl;
}
return0;
}

g++-oTest_XMLtinyxml.cpptinystr.cpptinyxmlerror.cpptinyxmlparser.cppTest_XML.cpp-g

./Test_XMLinfo.xml
out:
address=child
email=andycgli@tencent
name=tinyxml
number=1234
phone=13519141822
sex=man


Ex 2:

SERVERCONF.xml

<?xmlversion="1.0"encoding="gb2312?>
<root>
<SERVER_IP>10.111.222.333</SERVER_IP>
<SERVER_PORT>30000</SERVER_PORT>
<FMODULE_NAME>First_Module</FMODULE_NAME>
<FMODULE_ID>00001</FMODULE_ID>
....
</root>
Tiny_XML.cpp

voiddoXML(constchar*Conf_Name,map<string,string>&Map)
{
TiXmlDocumentdoc;
if(!doc.LoadFile(Conf_Name))
{
cout<<"LoadFile错误<<endl;
return;
}

TiXmlElement*RootElement=doc.RootElement();
TiXmlElement*AllElement=RootElement->FirstChirdElement();

for(;AllElement!=NULL;AllElement=AllElement->NextSiblingElement())
{
TiXmlElement*nElement=AllElement->FirstChildElement();

stringtype=AllElement->Value()
stringvalue=AllElement->GetText();
Map[type]=value;
}
}

intmain(intargc,char**argv)
{
if(argc!=2)
{
cout<<"参数错误"<<endl;
return-1;
}

map<string,string>Map;

doXML(argv[1],string>::iteratorit;
for(it=Map.begin();it!=Map.end();it++)
{
cout<<it->first<<"="<<it->second<<endl;
}

return0;
}

编译方法同上
Tiny_XMLSRVERCONFIG.xml
out:
SERVER_IP=10.111.222.333
SERVER_PORT=30000
FMODULE_NAME=First_Module
FMODULE_ID=00001


以此记录我进步的过程

原文链接:https://www.f2er.com/xml/295367.html

猜你在找的XML相关文章