加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

tinyxml入门学习

发布时间:2020-12-16 09:13:35 所属栏目:百科 来源:网络整理
导读:XMLDocument doc; doc.LoadFile("1.xml"); /************************************************************************/ /*获得子节点 通过rootElement得到根节点 或者通过FirstchildElement() 默认是获得第一个节点,也可以传递进参数 获取指定名字的标签
XMLDocument doc; doc.LoadFile("1.xml"); /************************************************************************/ /*获得子节点 通过rootElement得到根节点 或者通过FirstchildElement() 默认是获得第一个节点,也可以传递进参数 获取指定名字的标签 根节点是doc的唯一子节点,因为xml只允许一个根节点 */ /************************************************************************/ auto root = doc.RootElement(); doc.FirstChildElement(); doc.FirstChildElement("classes"); auto classDinxin = root->FirstChildElement("class"); auto mems = classDinxin->FirstChildElement("members"); /************************************************************************/ /* 遍历子节点并获得其属性 通过NextSiblingElement获得下一个成员 获得一个节点的属性方法很多: Attribute(char *)获得指定名字的属性,返回字符串 IntAttrbute(char*)获得指定名字的属性,返回整数,还有float,bool等等 其内部是依靠 mem->QueryAttribute;//支持获得多种类型 mem->QueryDoubleAttribute等等获得具体类型值 query***方法需要传递参数获得值,用起来比较麻烦,所以又封装了 Attribute(char *) IntAttrbute(char*)等函数 mem->FirstAttribute()获得第一个属性 如果给定一个属性,那么如何获得他的值 我们可以通过mem->FirstAttribute()->Value();直接返回其字符串值 通过mem->FirstAttribute()->QueryDoubleValue()等等获得其他类型的值 和节点类型一样,query方法获得属性的具体值比较麻烦,于是封装了下面类似 的方法 mem->FirstAttribute()->FloatValue(), 上面可以总结为两个问题: 节点如何获取属性的值 获得的属性如何取得其自身的值 值得注意的是:解析器解析后获得的值都是字符串类型的,解析器通过分析字符串值来获得具体的 其他值,如字符串值“123”,那么如果我们调用doubleAttribute,内部的操作就是调用函数,将字符串转为数值 通过attr = attr->Next();我们可以获得下一个相邻的属性 */ /************************************************************************/ { auto mem = mems->FirstChildElement(); while (mem) { auto attr = mem->FirstAttribute(); while (attr) { std::cout << attr->Name() << attr->Value(); attr = attr->Next(); } mem = mem->NextSiblingElement(); } } /************************************************************************/ /* 获得和设置节点的text mem->GetText();获取字符串值, 通过query***函数来获取具体值 double d; mem->QueryDoubleText(&d); 在原本的引擎中,只有query***函数来获取具体值,笔者这里在原来的引擎中添加了和上述获取属性值类似的方法 来简化获取text的具体值 mem->IntText(); */ /************************************************************************/ { auto mem = mems->FirstChildElement(); std::cout << mem->GetText(); mem->IntText(); double d; } /************************************************************************/ /* 设置值 读取到内存中后,我们可以设置其值 */ /************************************************************************/ { auto mem = mems->FirstChildElement(); mem->SetName("member"); mem->SetAttribute("name","羊绒");//多个重载,支持多种值类型,实际上还是以字符串保存 mem->SetText(66666); } /************************************************************************/ /*新建节点和属性以及text,并设置到文件中 1、新建描述信息 auto declare = doc.NewDeclaration(); doc.LinkEndChild(declare); doc.InsertFirstChild(declare); doc.InsertEndChild(declare); 2、插入注释 mems->InsertFirstChild(doc.NewComment(" 这描述了成员具体信息 ")); 3、新建节点,并设置值 auto newMem = doc.NewElement("member"); newMem->SetAttribute("name","Obama"); newMem->SetAttribute("id","1100301222"); newMem->SetText(88888); auto mem = mems->FirstChildElement()->NextSiblingElement(); mems->InsertAfterChild(mem,newMem); */ /************************************************************************/ /************************************************************************/ /* 删除节点,属性,text mems->DeleteChild(mems->FirstChildElement()); auto mem = mems->FirstChildElement(); mem->DeleteAttribute("name"); mems->DeleteChildren();//删除所有子节点 没有删除text的属性,我们只需要把text设置为空字符串即可 */ /************************************************************************/ /************************************************************************/ /*修改现有属性值? 遗憾的是,没有具体的函数实现这种功能,我们只可以用setAttribute函数把属性名字和值都设置一遍 */ /************************************************************************/ /************************************************************************/ /* 用字符串新建xml */ /************************************************************************/ char xml[] = { "<?xml version='1.0' encoding='gb2312' ?>" "<!-- gameInfo -->" "<game>" "<info>" "<name>" "angry birds" "</name>" "<size>" "23M" "</size>" "</info>" "</game>" }; XMLDocument dd; dd.Parse(xml); dd.SaveFile("2.xml"); //修改都是在内存中进行的,修改后记得保存偶 doc.SaveFile("1.xml"); return 0; }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读