c ++ rapidxml пример node_iterator? - PullRequest
5 голосов
/ 20 января 2010

Я только начал использовать 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, который, кажется, является дополнительным классом итератора, чтобы сделать это для меня. В любом случае, я не смог найти ни одного примера, как его использовать, поэтому мне было интересно, может кто-нибудь показать мне:)

спасибо!

Ответы [ 3 ]

2 голосов
/ 17 июля 2014
#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;
} );
2 голосов
/ 21 января 2010

Документация , в которой я смог найти документы типа node_iterator. Я даже не могу найти слово iterator на этой странице, кроме как со ссылкой на итераторы вывода, которые вам явно не нужны.

Возможно, это внутренний API или находится в стадии разработки, поэтому вам, вероятно, лучше не использовать его прямо сейчас.

1 голос
/ 13 января 2011

Нет RapidXml не предоставляет никаких итераторов. Ваше решение - то, которому нужно следовать ... вручную, используя функции first_node, next_sibling и так далее ... RapidXml сделан легким и быстрым ... Даже если программист наверняка оценит некоторый синтаксис, чтобы помочь ему:)

...