6

我刚开始使用 rapidXML,因为它被推荐给我。现在要迭代多个兄弟姐妹,我这样做:

//get the first texture node    
xml_node<>* texNode = rootNode->first_node("Texture");
if(texNode != 0){
    string test = texNode->first_attribute("path")->value();
    cout << test << endl;
}
//get all its siblings
while(texNode->next_sibling() != 0){
    string test = texNode->first_attribute("path")->value();
    cout << test << endl;
    texNode = texNode->next_sibling();
}

作为基本测试,它工作正常。无论如何,我遇到了 node_iterator 这似乎是一个额外的迭代器类来为我做这件事。无论如何,我找不到任何关于如何使用它的例子,所以我想知道是否有人可以告诉我:)

谢谢!

4

3 回答 3

3

我可以找到的文档没有node_iterator类型。除了参考输出迭代器外,我什至在该页面上都找不到这个词iterator,这显然是您不想要的。

它可能是一个内部 API,也可能是一个正在开发中的 API,所以您现在最好不要使用它。

于 2010-01-20T22:28:38.037 回答
3
#include "rapidxml/rapidxml.hpp"
#include "rapidxml/rapidxml_utils.hpp"
#include "rapidxml/rapidxml_iterators.hpp"

...

rapidxml::xml_document<wchar_t> doc;
doc.parse<0>(xmlFile.data());

rapidxml::node_iterator< wchar_t > begIt( doc.first_node());
rapidxml::node_iterator< wchar_t > endIt;

...

std::for_each( begIt, endIt, [] (rapidxml::xml_node< wchar_t >& node)
{
    std::wcout << node.name() << std::endl;
} );
于 2014-07-16T21:09:51.850 回答
1

No RapidXml 不提供任何迭代器。您的解决方案是要遵循的……手动使用函数 first_node、next_sibling 等……RapidXml 轻巧快速……即使程序员肯定会喜欢一些语法来帮助他:)

于 2011-01-13T08:23:05.253 回答