tinyxml入门学习

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值