本人是幼年程序猿,至今尚未成型
在以前的编程中(简直就是闹着玩的)用到的一些外部的参数,要不是在程序执行的时候在命令行中传进去,要不然就是用宏定义。之后才发现人家都是程序读取配置文件,只要程序编译好,需要时只要更改配置文件里的配置选项即可,配置文件一般是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
以此记录我进步的过程