2010-01-20 46 views
5

Tôi chỉ mới bắt đầu sử dụng rapidXML vì nó được đề xuất cho tôi. Ngay bây giờ để lặp qua nhiều anh chị em tôi làm điều này:C++ rapidxml node_iterator ví dụ?

//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(); 
} 

làm bài kiểm tra cơ bản và nó hoạt động tốt. Dù sao, tôi đã đi qua node_iterator mà dường như là một lớp lặp thêm để làm điều này cho tôi. anyways, tôi không thể tìm thấy bất kỳ ví dụ về cách sử dụng nó, vì vậy tôi đã tự hỏi nếu một số người có thể chỉ cho tôi :)

thanks!

+0

hãy cẩn thận về rapidxml vì nó không thực hiện bất kỳ kiểm tra có ý nghĩa tốt nào ... –

+0

Ví dụ trên là cách phù hợp để thực hiện. Trừ khi bạn kiểm tra texNode-> next_sibling()! = 0 ở đầu vòng lặp while, sau đó khi bạn tới anh chị em cuối cùng và đặt texNode = texNode-> next_sibling(); ở cuối vòng lặp while, textNode đó sẽ không có next_sibling vì nó là phần tử cuối cùng. Trong vòng lặp while sẽ không bao giờ xử lý anh chị em cuối cùng vì kiểm tra bắt đầu đó. – NSDestr0yer

Trả lời

2

documentation mà tôi có thể tìm thấy tài liệu không có loại node_iterator. Tôi thậm chí không thể tìm thấy từ iterator trên trang đó ngoại trừ tham chiếu đến các trình vòng lặp đầu ra mà bạn rõ ràng không muốn.

Có thể đó là một API nội bộ hoặc một API đang được phát triển, vì vậy, có lẽ bạn không nên sử dụng nó ngay bây giờ.

+0

yeah, thats những gì tôi figgured, nếu tôi bao gồm iterator.hpp mà đi kèm với nó nó ném khá một vài lỗi trên GCC 4.2 trên anyways mac. – user240137

1

Không RapidXml không cung cấp bất kỳ trình lặp nào. Giải pháp của bạn là một trong những được theo sau ... bằng tay sử dụng chức năng first_node, next_sibling và như vậy ... RapidXml được thực hiện để được ánh sáng và nhanh ... Ngay cả khi một lập trình viên chắc chắn sẽ đánh giá cao một số cú pháp để giúp anh ta :)

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

phát hiện ra rất nhiều lỗi nếu tôi bao gồm tệp quickxml_iterators.hpp –