使用tinyxml封装或解析xml形式字符串
2015-03-21 23:13
239 查看
有时封装一些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的一个节点。
第三步:解析xml形式字符串。
与读取xml文件操作类似,一般在sdk接口中实现此功能,读取所有节点,根据条件删选节点,所以即使一些节点没有使用而被参入进来也没关系。
有时封装一些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读取操作。。。
相关文章推荐
- 使用dom4j解析xml字符串
- 【类库解析】一个轻量级C++ xml解释器 TinyXML的使用方法
- 使用TinyXml 解析XML文件
- CMarkup与tinyXml直接解析XML字符串
- Cocos2dx---------------- TinyXml 解析 XML(推荐使用rapidxml)
- 字符串转换成XML并使用DOM、JDOM、DOM4J解析
- oracle中使用存储过程解析xml字符串
- 使用dom4j解析xml字符串
- [Cocos2d-x] 使用TinyXml 解析XML文件
- Cocos2dx-TinyXml 解析 XML(推荐使用rapidxml)
- CMarkup与tinyXml直接解析XML字符串
- Cocos2dx---------------- TinyXml 解析 XML(推荐使用rapidxml)
- 如果使用 tinyxml 解析xml 文档
- 使用dom4j来解析相关的xml字符串
- 使用TinyXML解析XML
- 使用jdom解析xml文件和xml格式的字符串
- C++解析xml(使用tinyxml)
- 使用js解析xml文档和xml字符串(ie和火狐)
- Cocos2dx---------------- TinyXml 解析 XML(推荐使用rapidxml)
- 浅谈如何使用tinyxml解析xml文件