gpt4 book ai didi

C++ RapidXML 获得相同类型的兄弟?

转载 作者:行者123 更新时间:2023-11-28 03:22:01 26 4
gpt4 key购买 nike

因此,在 RapidXML 中,我试图遍历我的文件以从某些 tileset 节点获取数据:

rapidxml::xml_node<> *root_node = doc.first_node("map");
for(rapidxml::xml_node<> *tileset = root_node->first_node("tileset");
tileset != 0; tileset = tileset->next_sibling("tileset"))
{
// Iteration stuff...

您可能会说,这有什么问题?那么,在 RapidXML 中,next_sibling() 函数可选地匹配名称:

xml_node<Ch>* next_sibling(const Ch *name=0, std::size_t name_size=0, bool
case_sensitive=true) const;

Gets next sibling node, optionally matching node name. Behaviour is undefined
if node has no parent. Use parent() to test if node has a parent.

因此,如果找不到具有该名称的节点,它只会返回下一个兄弟节点。这是我程序中的一个问题,我只是不想进行额外的迭代。我认为这是愚蠢的,但无论如何。有没有办法让它遍历我的tileset节点?

最佳答案

“可选地匹配节点名称”——因为参数是可选的。如果您传递了一个名称字符串,但未找到,您将获得零返回值。

xml_node<Ch> *next_sibling(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const
{
assert(this->m_parent); // Cannot query for siblings if node has no parent
if (name)
{
if (name_size == 0)
name_size = internal::measure(name);
for (xml_node<Ch> *sibling = m_next_sibling; sibling; sibling = sibling->m_next_sibling)
if (internal::compare(sibling->name(), sibling->name_size(), name, name_size, case_sensitive))
return sibling;
return 0;
}
else
return m_next_sibling;
}

关于C++ RapidXML 获得相同类型的兄弟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15169943/

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