tinyxml2 常用读取接口对照表
Attribute()读字符串属性BoolAttribute()/IntAttribute()/DoubleAttribute()...按指定类型直接读支持默认值QueryXXXAttribute()按指定类型读但会告诉你“成功 / 不存在 / 格式错误”可区分“没写”和“写错”FindAttribute()只找属性对象本身GetText()/QueryXXXText()读节点文本不是读属性1. tinyxml2 常用接口总对照表接口作用返回值是否支持默认值能否区分“属性不存在”和“格式错误”常见用途Attribute(name)读取属性字符串值const char*否否读取字符串属性Attribute(name, value)判断属性值是否等于某字符串const char*或nullptr否否判断某属性是否等于指定值BoolAttribute(name, defaultValue)读取bool 属性bool是否简单读取布尔开关IntAttribute(name, defaultValue)读取int 属性int是否简单读取整数UnsignedAttribute(name, defaultValue)读取unsigned 属性unsigned是否读取无符号整数Int64Attribute(name, defaultValue)读取int64_t属性int64_t是否大整数Unsigned64Attribute(name, defaultValue)读取uint64_t属性uint64_t是否大无符号整数FloatAttribute(name, defaultValue)读取float 属性float是否浮点参数DoubleAttribute(name, defaultValue)读取double 属性double是否精度更高的浮点参数QueryBoolAttribute(name, out)查询bool 属性XMLError否是需要严格判断配置合法性QueryIntAttribute(name, out)查询int 属性XMLError否是需要判断是否读取成功QueryUnsignedAttribute(name, out)查询unsigned 属性XMLError否是严格校验QueryInt64Attribute(name, out)查询int64_t属性XMLError否是严格校验QueryUnsigned64Attribute(name, out)查询uint64_t属性XMLError否是严格校验QueryFloatAttribute(name, out)查询float 属性XMLError否是严格校验QueryDoubleAttribute(name, out)查询double 属性XMLError否是严格校验QueryStringAttribute(name, out)查询字符串属性XMLError否部分能需要显式判断字符串属性是否存在FindAttribute(name)找到属性节点const XMLAttribute*否只区分是否存在想进一步检查属性本身GetText()读取元素文本const char*否否读取tagtext/tagQueryIntText(out)/QueryBoolText(out)等读取元素文本并转类型XMLError否是严格读取文本值2.Attribute()系列2.1Attribute(name)const char* val node-Attribute(Type);含义读取属性patchType的字符串值。返回1、属性存在返回属性值字符串2、属性不存在返回nullptr。特点1、只读字符串2、没有默认值3、不做类型转换4、最常用于字符串属性读取。2.2Attribute(name, value)if (node-Attribute(Type, string)) { ... }含义检查属性Type是否存在并且值是否等于string。返回1、相等返回属性值指针可当 true2、不存在或不相等返回nullptr。注意这里第二个参数不是默认值而是比较值。特点1、只读字符串2、没有默认值3、不做类型转换4、最常用于字符串属性读取。3.BoolAttribute()/IntAttribute()/DoubleAttribute()系列这类接口特点很统一直接按目标类型返回值可以给默认值如果属性存在返回解析后的值如果属性不存在返回默认值如果转换失败或者格式错误通常也会回退到默认值不能区分“没写属性”还是“属性写错了”3.1BoolAttribute()bool enabled node-BoolAttribute(enable, false);含义读取enable属性并转成 bool。适用场景适合“属性可选没写就走默认值”的场景。3.2IntAttribute()int width node-IntAttribute(Width, 0);含义读取整数属性。3.3DoubleAttribute()double sigma node-DoubleAttribute(sigma, 0.2);含义读取 double 属性读不到就用默认值。3.4 这一类接口的共同特点总结接口典型类型不存在时类型错误时是否适合严格校验BoolAttribute()bool返回默认值通常返回默认值不太适合IntAttribute()int返回默认值通常返回默认值不太适合DoubleAttribute()double返回默认值通常返回默认值不太适合所以想省事用XXXAttribute(default)想严格检查配置用QueryXXXAttribute()4.QueryXXXAttribute()系列这类接口和上面最大的区别是它不直接把结果作为返回值而是通过输出参数拿到值通过返回码告诉你是否成功这是做严格配置校验时最好用的一组接口。4.1QueryIntAttribute()int width 0; XMLError err node-QueryIntAttribute(Width, width);返回值通常有XML_SUCCESS成功XML_NO_ATTRIBUTE属性不存在XML_WRONG_ATTRIBUTE_TYPE属性存在但类型不对例子 1正确Item Width128 /结果err XML_SUCCESS width 128例子 2属性不存在Item /结果err XML_NO_ATTRIBUTE例子 3类型错误Item Widthabc /结果err XML_WRONG_ATTRIBUTE_TYPE这就是它比IntAttribute()强的地方。4.2QueryBoolAttribute()bool enable false; XMLError err node-QueryBoolAttribute(Enable, enable);作用: 严格读取 bool 配置。4.3QueryDoubleAttribute()double threshold 0.0; XMLError err node-QueryDoubleAttribute(Threshold, threshold);4.4QueryStringAttribute()const char* patchType nullptr; XMLError err node-QueryStringAttribute(Type, Type);作用严格查询字符串属性是否存在。4.5QueryXXXAttribute()总结接口返回值输出参数能区分不存在能区分类型错误适合场景QueryIntAttribute()XMLErrorint*是是严格解析配置QueryBoolAttribute()XMLErrorbool*是是严格布尔配置QueryDoubleAttribute()XMLErrordouble*是是严格数值配置QueryStringAttribute()XMLErrorconst char**是字符串一般无类型错误问题严格字符串读取5.Attribute()和QueryXXXAttribute()的核心区别对比项Attribute()/IntAttribute()这类QueryXXXAttribute()这类用法简单稍复杂返回结果直接给值 / 指针返回状态码是否支持默认值IntAttribute等支持Attribute不支持不支持能否区分属性不存在通常不方便可以能否区分类型错误通常不行可以适合宽松配置读取严格配置校验一句话概括宽松读取用XXXAttribute()严格校验用QueryXXXAttribute()6.FindAttribute()const tinyxml2::XMLAttribute* attr node-FindAttribute(Type);含义查找属性对象本身而不是直接取值。返回1、找到返回属性对象指针2、找不到返回nullptr。作用先判断属性是否存在再自己处理属性名、属性值例如const XMLAttribute* attr node-FindAttribute(Type); if (attr) { std::cout attr-Name() attr-Value() std::endl; }7.GetText()和属性读取的区别注意不要把“属性”和“节点文本”混在一起。7.1 读属性Attribute()Item Width128 Height64 /这里Width、Height是属性。读取方式node-IntAttribute(Width, 0);7.2 读文本GetText()Imageabcdefg12345/Image这里abcdefg12345是节点文本不是属性。读取方式const char* text imageNode-GetText();7.3 对照表XML 写法数据类型读取方式Node Width128/属性Attribute()/IntAttribute()Nodetrue/Node节点文本GetText()/QueryBoolText()Imagebase64.../Image节点文本GetText()8.QueryXXXText()这是和QueryXXXAttribute()对应的一组“读取节点文本”的接口。8.1QueryIntText()Width128/Widthint width 0; XMLError err widthNode-QueryIntText(width);8.2QueryBoolText()Enabletrue/Enablebool enable false; XMLError err enableNode-QueryBoolText(enable);9. 一张最实用的记忆表需求推荐接口读取字符串属性Attribute(name)判断属性是否等于某字符串Attribute(name, value)读取 bool允许默认值BoolAttribute(name, def)读取 int允许默认值IntAttribute(name, def)读取 double允许默认值DoubleAttribute(name, def)严格判断 int 属性是否存在且合法QueryIntAttribute(name, v)严格判断 bool 属性是否存在且合法QueryBoolAttribute(name, v)严格判断字符串属性是否存在QueryStringAttribute(name, v)只判断属性是否存在FindAttribute(name)读取tagtext/tag文本GetText()严格读取文本并转类型QueryIntText()/QueryBoolText()