问题
I just started using rapidXML since it was recommended to me. Right now to iterate over multiple siblings i do this:
//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();
}
as a basic test and it works fine. Anyways, I came across node_iterator which seems to be an extra iterator class to do this for me. anyways, I could not find any example on how to use it, so I was wondering if some one could show me :)
thanks!
回答1:
The documentation that I could find documents no node_iterator
type. I can't even find the word iterator
on that page except in reference to output iterators, which you clearly don't want.
It could be that it's an internal API, or one under development, so you're probably best not to use it right now.
回答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;
} );
回答3:
No RapidXml does not provide any iterator. Your solution is the one to be followed... manually using function first_node, next_sibling and so on... RapidXml is made to be light and fast... Even if a programmer would sure appreciate some syntax to help him :)
来源:https://stackoverflow.com/questions/2104523/c-rapidxml-node-iterator-example