2016-04-11 33 views
0

C++'da RapidXML kullanarak büyük bir XML Dosyası (1.8 GB) ayrıştırmaya çalışıyorum. Aşağıdaki yöntemi kullanarak herhangi bir spesifik düğümün çocukları almak mümkün olmakla birlikte:RapidXML Derinlikteki XML Ayrıştırma İlk modu

for(xml_node<> *child = node->first_node(); child; child = child->next_sibling()) { 
... 
} 

Ben Derinlik ilk akıllı ayrıştırmak anlamaya olamaz. RapidXML, aynı için herhangi bir dahili yineleyici sağlamaz. Büyük xml işleme için başka bir performans yoğun kütüphanesi var mı (DOM'ta SAX değil)?

+0

[pugiXML] (http://pugixml.org/) çok ölçülebilir alternatif ve [bu bölüm 5.7 el var] olduğu (http://pugixml.org/docs/manual.html#access.walker) derinlik-ilk geçişin mümkün olduğunu öne sürer. – acraig5075

+0

bellekte büyük işleyebilir mi? o zaman bir deneyin verecektir! –

cevap

1

XML'in ayrıştırılmasıyla içeriğin geçişini karıştırıyorsunuz.

RapidXML, XML nesnesini tek ve doğrusal geçişle ayrıştırır ve nesne ağacını olduğu gibi oluşturur. Daha sonra ağacı istediğiniz herhangi bir şekilde çaprazlayabilirsiniz.

Derinlemesine ilk arama genellikle bir yineleme prosedürüdür, ancak aramanız içinde, gösterdiğiniz kodu kullanarak her bir düğümün tüm kardeşlerini yineleyeceksiniz. Fark, her düğümde yaptığınız şey, üzerinde yinelediğiniz gibi.

void processNode(xml_node<> node) 
    { 
    for(xml_node<> *child = node->first_node(); child; child = child->next_sibling()) 
    { 
     processNode(child); 
     ... and do more stuff here... 
    } 
    } 
+0

anladı! Teşekkürler :) –