使用tinyxml封装或解析xml形式字符串

来源:互联网 发布:日本杂志模特知乎 编辑:程序博客网 时间:2024/03/29 17:24


有时封装一些sdk接口,但是一些入参的参数容易变动,如对不同设备的操作,他们的一些删选条件会不同,所以调用接口时其参数也不同,有时也有存在增加或删除一些设备参数的时候。既然是sdk接口了就不能经常改动,所以对于易变的一些设备参数,在sdk上层我们封装为一个数据结构体,然后转化为一个一个xml形式的字符串,接着以字符串的形式传入sdk接口,最后在sdk接口函数中解析xml形式的字符串。
这样有以下几个优点:
1,保证了sdk接口的稳定性。
2,对于不同设备新增设备参数,只需修改sdk上层调用函数即可。
3,易于扩展。


第一步:下载tinyxml。
具体操作参考网上的资料,随便搜如创建xml、读取xml节点、追加xml节点等。
tinyxml.h
tinystr.h
tinystr.cpp
tinyxml.cpp
tinyxmlparser.cpp
tinyxmlerror.cpp
把以上六个文件加入到自己的工程中去。


第二步:构建xml形式字符串。
以创建xml文件的形式创建xml形式的字符串,我们可以把所使用到的设备参数规划为一个数据结构体,每一数据成员作为xml的一个节点。

void creatXml()                             //创建xml文件{  TiXmlDocument *myDocument = new TiXmlDocument();          //创建一个根结点  TiXmlDeclaration *pDeclaration=new TiXmlDeclaration("1.0","UTF-8","");//创建xml文件头  myDocument->LinkEndChild(pDeclaration);              //加入文件头   TiXmlElement *BUSINESS=new TiXmlElement("BUSINESS");        //创建一个节点  myDocument->LinkEndChild(BUSINESS);              //加入BUSINESS节点   TiXmlElement *COUNTRY = new TiXmlElement("COUNTRY");        //创建两个节点  TiXmlElement *PLANET = new TiXmlElement("PLANET");  BUSINESS->LinkEndChild(PLANET);                //将新建的节点加到BUSINESS下一级  BUSINESS->LinkEndChild(COUNTRY);       TiXmlText *PLANETtxt = new TiXmlText("地球");           //添加节点内的文本  TiXmlText *COUNTRYtxt = new TiXmlText("中国");  COUNTRY->LinkEndChild(COUNTRYtxt);  PLANET->LinkEndChild(PLANETtxt);   //若是保存xml文件如此使用  //myDocument->SaveFile("testxml.xml");     //保存xml形式的字符串  char *psXML=NULL;       // 用来保存xml的字符串,可以放到函数参数里传递出去  TiXmlPrinter printer;  myDocument->Accept(&printer);     psXML = new char[512];  memset(psXML,0x0,sizeof(psXML));  memcpy(psXML,printer.CStr(),printer.Size());  psXML[printer.Size()] = '\0';  delete myDocument;  myDocument = NULL;}


第三步:解析xml形式字符串。
与读取xml文件操作类似,一般在sdk接口中实现此功能,读取所有节点,根据条件删选节点,所以即使一些节点没有使用而被参入进来也没关系。

const char * xmlString = "<?xml version=\"1.0\" standalone=no>\n<!– Our to do list data –>\n<ToDo>\n<Item priority=\"1\"> <bold>Toy store!</bold>\n</Item>\n<Item priority=\"2\"> Do bills</Item>\n</ToDo> "; TiXmlDocument *doc = new TiXmlDocument(); doc->Parse(xmlString); TiXmlElement * rootElement = doc->RootElement(); const char * rootName = rootElement->Value();
然后就是tinyxml读取操作。。。



0 0
原创粉丝点击