gpt4 book ai didi

c++ - 当 TinyXML 访问者函数返回 false 时,为什么它停止解析兄弟?

转载 作者:太空狗 更新时间:2023-10-29 23:09:11 25 4
gpt4 key购买 nike

我们采用了 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 元素,然后停止了。当我检查时,文档说

If you return 'true' from a Visit method, recursive parsing will continue. If you return false, no children of this node or its sibilings will be Visited.

对我来说不解析 child 是有道理的,但 sibling 对我来说似乎很奇怪。这种行为的原因是什么?有什么办法让它做我想做的事吗?

也就是说,我只对调色板元素感兴趣,但它们可能不止一个(以及其他元素)。我想返回 false 以跳过其他元素类型,而不是必须递归地处理它们,同时仍然找到所有的调色板。所以我想我正在寻找一种方法来仅访问调色板元素,同时完全忽略其他所有内容。

最佳答案

What is the reason for this behavior?

目的是让您可以递归地搜索节点树,并在找到所需内容后立即停止。

I am interested only in the palette elements, but there may be more than one of them (as well as other elements)... So I guess I am looking for a way to visit only the palette elements, while completely ignoring everything else.

进一步的讨论意味着所有 <palette>元素是树中某个特定节点的子节点。

Visit用于检查整个(子)树,假设您感兴趣的节点(在本例中为 <palette> 元素)可以在任何深度找到。

如果不是这样,那么它就不是完成这项工作的工具。

您可以使用 FirstChild/LastChild/IterateChildren/ETC。成员函数迭代包含所有 <palette> 的任何节点的子节点元素,并对实际存在的节点做任何你需要做的事情(经检查)<palette>元素,并忽略其他元素。

关于c++ - 当 TinyXML 访问者函数返回 false 时,为什么它停止解析兄弟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6286167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com