我们采用Tiny XML作为我们的XML解析器。我正在编写代码从XML文件中获取调色板,并编写了以下访问者函数:
我惊奇地发现,这个程序只解析了第一个
如果您从Visit方法中返回'true',则递归解析将继续进行。如果您返回false,则此节点及其兄弟节点的任何子节点都不会被访问。
我认为不解析子节点是有道理的,但忽略兄弟节点对我来说很奇怪。这种行为的原因是什么?有没有办法使它做我想要的事情?
也就是说,我只对调色板元素感兴趣,但可能会有多个调色板元素(以及其他元素)。我希望返回false以跳过其他元素类型,而无需递归处理它们,同时仍然找到所有调色板。所以我想寻找一种只访问调色板元素,完全忽略其他元素的方法。
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
元素感兴趣,但可能会有多个(以及其他元素)。我想返回false
以跳过其他元素类型,而不必递归处理它们,同时仍然找到所有的palette
。 - andrewdski