当TinyXML访问者函数返回false时,为什么它停止解析同级
When TinyXML visitor function returns false, why does it stop parsing siblings?
我们采用了Tiny XML作为我们的XML解析器。我正在编写从XML文件中抓取调色板的代码,并编写了一个类似于以下的访问者函数:
PALETTE_PARSER::VisitEnter( const TiXmlElement& Element, const TiXmlAttribute* First Attribute)
{
if( Element.ValueStr() == "palette" )
{
AddPalette( Element );
return( true );
}
else
{
return( false );
}
}
令我惊讶的是,这解析了第一个palette
元素,然后停止了。当我检查时,文件上写着
如果从Visit方法返回"true",则递归解析将继续。如果你回来false,不会访问此节点的子节点或其可能性。
对我来说,不分析孩子是有道理的,但兄弟姐妹对我来说似乎很奇怪。这种行为的原因是什么?有什么办法让它做我想做的事吗?
也就是说,我只对调色板元素感兴趣,但可能有不止一个(以及其他元素)。我想返回false来跳过其他元素类型,而不是递归地处理它们,同时仍然可以找到所有的调色板。所以我想我正在寻找一种只访问调色板元素,而完全忽略其他元素的方法。
这种行为的原因是什么?
其目的是允许您递归地搜索节点树,并在找到要查找的内容后立即停止。
我只对调色板元素感兴趣,但可能有不止一个(以及其他元素)。。。所以我想我正在寻找一种只访问调色板元素,而完全忽略其他元素的方法。
进一步的讨论意味着所有的<palette>
元素都是树中某个特定节点的子节点。
Visit
用于检查整个(子)树,假设您感兴趣的节点(在本例中为<palette>
元素)可以在任何深度找到。
如果不是这样,那么它就不是工作的工具。
您可以使用FirstChild
/LastChild
/IterateChildren
/等。成员函数来迭代包含所有<palette>
元素的任何节点的子节点,并对实际为(经检查)<palette>
元素的节点执行任何需要执行的操作,而忽略其他节点。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 为什么在全局范围内使用"extern int a"似乎不行?
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 为什么会发生堆损坏
- 为什么使用 "this" 指针调用派生成员函数?
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么比较运算符如此快速
- 为什么 Serial.println(<char[]>);返回随机字符?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 访问者访问变体并返回不同类型时出错
- 为什么不;名字在地图上是按顺序排列的吗
- 我的字符计数代码计算错误.为什么
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 为什么我不能将类指针传递给访问者类?它说没有匹配的功能
- 当TinyXML访问者函数返回false时,为什么它停止解析同级