2010-01-20 9 views
5

मैंने अभी रेडएक्सएमएल का उपयोग शुरू किया क्योंकि इसकी सिफारिश की गई थी। अभी कई भाई बहनों पर फिर से शुरू करने के लिए मैं यह करता हूं:सी ++ rapidxml 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(); 
} 

मूल परीक्षण के रूप में और यह ठीक काम करता है। वैसे भी, मैं नोड_इटरेटर में आया जो मेरे लिए ऐसा करने के लिए एक अतिरिक्त इटरेटर वर्ग प्रतीत होता है। वैसे भी, मुझे इसका उपयोग करने के तरीके पर कोई उदाहरण नहीं मिला, इसलिए मैं सोच रहा था कि कोई मुझे दिखा सकता है :)

धन्यवाद!

+0

rapidxml के बारे में सावधान रहें क्योंकि यह कोई सार्थक अच्छी तरह से गठबंधन जांच नहीं करता है ... –

+0

उपरोक्त उदाहरण यह करने का सही तरीका है। यदि आप अपने टाइम लूप की शुरुआत में texNode-> next_sibling()! = 0 के लिए परीक्षण करते हैं, तो जब आप अंतिम भाई पर जाते हैं और texNode = texNode-> next_sibling() सेट करते हैं; जबकि लूप के अंत में, उस टेक्स्ट नोड में अगला_सिबल नहीं होगा क्योंकि यह आखिरी है। इसके लिए जबकि लूप उस शुरुआती भाई की वजह से आखिरी भाई को कभी संसाधित नहीं करेगा। – NSDestr0yer

उत्तर

2

documentation कि मुझे दस्तावेज़ node_iterator प्रकार नहीं मिल सका। मैं उस पृष्ठ पर iterator शब्द को आउटपुट इटरेटर्स के संदर्भ में छोड़कर भी नहीं ढूंढ सकता, जिसे आप स्पष्ट रूप से नहीं चाहते हैं।

यह हो सकता है कि यह एक आंतरिक एपीआई है, या विकास के तहत एक है, तो शायद आप इसका अभी उपयोग नहीं कर सकते हैं।

+0

हाँ, जो मैंने पाया है, अगर मैं iterator.hpp शामिल करता हूं जो इसके साथ आता है तो यह मैक पर जीसीसी 4.2 पर कुछ त्रुटियों को फेंक देता है। – user240137

1

कोई रैपिडएक्सएमएल कोई इटरेटर प्रदान नहीं करता है। आपका समाधान एक का पालन किया जाना है ... मैन्युअल रूप से फ़ंक्शन first_node, next_sibling और इसी तरह का उपयोग कर ... रैपिडएक्सएमएल को हल्का और तेज़ बनाया गया है ... भले ही कोई प्रोग्रामर निश्चित रूप से उसकी मदद करने के लिए कुछ वाक्यविन्यास की सराहना करता है :)

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

यदि मैं rapidxml_iterators.hpp शामिल करता हूं तो बहुत सारी त्रुटियों को बाहर निकाल देता है –

संबंधित मुद्दे