2010-01-20 2 views
5

Я только начал использовать rapidXML, так как мне было рекомендовано. Сейчас перебрать несколько братьев и сестер я это сделать:C++ quickxml node_iterator пример?

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

спасибо!

+0

будьте осторожны с быстрым xml, так как он не делает никаких значимых проверок правильной формы ... –

+0

Вышеприведенный пример - правильный способ сделать это. За исключением случаев, когда вы тестируете texNode-> next_sibling()! = 0 в начале цикла while, тогда, когда вы дойдете до последнего брата и установите texNode = texNode-> next_sibling(); в конце цикла while этот textNode не будет иметь next_sibling, поскольку он является последним. Поэтому цикл while никогда не обработает самого последнего брата из-за этой начальной проверки. – NSDestr0yer

ответ

2

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

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

+0

да, это то, что я понял, если я включаю в себя итератор.hpp, который поставляется с ним, он все равно бросает на GCC немало ошибок на GCC 4.2. – user240137

1

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

2
#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; 
}); 
+0

выводит много ошибок, если я включаю quickxml_iterators.hpp –

Смежные вопросы