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
#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 に答える
3

タイプのないドキュメントを見つけることができたドキュメントnode_iterator。出力イテレータへの参照を除いて、そのページでその単語を見つけることさえできiteratorません。これは明らかに望ましくありません。

内部 API または開発中の API である可能性があるため、現在は使用しないことをお勧めします。

于 2010-01-20T22:28:38.037 に答える
1

いいえ RapidXml は反復子を提供しません。あなたの解決策は従うべきものです...関数first_node、next_siblingなどを手動で使用して... RapidXmlは軽量で高速になるように作られています...たとえプログラマーが彼を助けるためにいくつかの構文を高く評価したとしても:)

于 2011-01-13T08:23:05.253 に答える