您的位置:首页 > 其它

使用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的一个节点。

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读取操作。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: