解析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

  1. <?xmlversion="1.0"encoding="gb2312?>
  2. <Schoolname="softengine">
  3. <Classname="C++">
  4. <Studentname="andy"number="36"phone="123456789">
  5. <email>andy@163.com</email>
  6. <address>Beijing</address>
  7. <sex>man</sex>
  8. </Student>
  9. </Class>
  10. </School>

Test_XML.cpp

  1. #include<iostream>
  2. #include<string>
  3. #include<map>
  4. #include"tinystr.h"
  5. #include"tinyxml.h"
  6.  
  7. usingnamespacestd;
  8.  
  9. voidReadSchoolXml(constchar*Conf_File_Name)
  10. {
  11. TiXmlDocumentdoc;
  12. if(!doc.LoadFile(Conf_File_Name)
  13. {
  14. cout<<"LoadFile失败"<<endl;
  15. return;
  16. }
  17.  
  18. //root节点
  19. TiXmlElement*rootElement=doc.FirstChild("School");
  20. cout<<"rootName="<<rootElement->Value()<<endl;
  21.  
  22. //class节点
  23. TiXmlElement*classElement=rootElement->FirstChildElement();
  24. cout<<"classElement="<<classElement->Value()<<endl;
  25.  
  26. //student节点
  27. TiXmlElement*studentElement=classElement->FirstChildElement();
  28. cout<<"studentElment="<<studentElement->Value()<<endl;
  29.  
  30. for(;studentElement!=NULL;studentElement=studentElement->NextSiblingElement())
  31. {
  32. TiXmlAttribute*attributeOfStudent=studentElement->FirstAttribute();
  33. for(;arrtibuteOfStudent!=NULL;attributeOfStudent=attributeOfStudent->Next())
  34. {
  35. //cout<<attributeOfStudent->Name()<<"="<<attributeOfStudent->Value()<<endl;
  36. stringstr1=attributeOfStudent->Name();
  37. stringstr2=attributeOfStudent->Value();
  38.  
  39. Map[str1]=str2;
  40. }
  41.  
  42. TiXmlElement*studentContactElement=studentElement->FirstChildElement();
  43. for(;studentContactElement!=NULL;studentContactElement=studentContactElement->NextSiblingElement())
  44. {
  45. stringstr1=studentContactElement->Value();
  46. stringstr2=studentContactElement()->GetText();
  47.  
  48. Map[str1]=str2;
  49. }
  50. }
  51. }
  52.  
  53. intmain(intargc,char**argv)
  54. {
  55. if(argc<1)
  56. {
  57. cout<<"缺少参数"<<endl;
  58. return-1;
  59. }
  60.  
  61. map<string,string>Map
  62. ReadSchoolXml(argv[1],Map);
  63.  
  64. map<string,string>::iteratorit;
  65. for(it=Map.begin();it!=Map.end();it++)
  66. {
  67. cout<<it->first<<"="<<it->second<<endl;
  68. }
  69. return0;
  70. }
  71.  
  72. g++-oTest_XMLtinyxml.cpptinystr.cpptinyxmlerror.cpptinyxmlparser.cppTest_XML.cpp-g
  73.  
  74. ./Test_XMLinfo.xml
  75. out:
  76. address=child
  77. email=andycgli@tencent
  78. name=tinyxml
  79. number=1234
  80. phone=13519141822
  81. sex=man


Ex 2:

SERVERCONF.xml

  1. <?xmlversion="1.0"encoding="gb2312?>
  2. <root>
  3. <SERVER_IP>10.111.222.333</SERVER_IP>
  4. <SERVER_PORT>30000</SERVER_PORT>
  5. <FMODULE_NAME>First_Module</FMODULE_NAME>
  6. <FMODULE_ID>00001</FMODULE_ID>
  7. ....
  8. </root>
  1. Tiny_XML.cpp
  2.  
  3. voiddoXML(constchar*Conf_Name,map<string,string>&Map)
  4. {
  5. TiXmlDocumentdoc;
  6. if(!doc.LoadFile(Conf_Name))
  7. {
  8. cout<<"LoadFile错误<<endl;
  9. return;
  10. }
  11.  
  12. TiXmlElement*RootElement=doc.RootElement();
  13. TiXmlElement*AllElement=RootElement->FirstChirdElement();
  14.  
  15. for(;AllElement!=NULL;AllElement=AllElement->NextSiblingElement())
  16. {
  17. TiXmlElement*nElement=AllElement->FirstChildElement();
  18.  
  19. stringtype=AllElement->Value()
  20. stringvalue=AllElement->GetText();
  21. Map[type]=value;
  22. }
  23. }
  24.  
  25. intmain(intargc,char**argv)
  26. {
  27. if(argc!=2)
  28. {
  29. cout<<"参数错误"<<endl;
  30. return-1;
  31. }
  32.  
  33. map<string,string>Map;
  34.  
  35. doXML(argv[1],string>::iteratorit;
  36. for(it=Map.begin();it!=Map.end();it++)
  37. {
  38. cout<<it->first<<"="<<it->second<<endl;
  39. }
  40.  
  41. return0;
  42. }
  43.  
  44. 编译方法同上
  45. Tiny_XMLSRVERCONFIG.xml
  46. out:
  47. SERVER_IP=10.111.222.333
  48. SERVER_PORT=30000
  49. FMODULE_NAME=First_Module
  50. FMODULE_ID=00001


以此记录我进步的过程

猜你在找的XML相关文章