2016-04-11 29 views
0

C++でRapidXMLを使用して大きなXMLファイル(1.8 GB)を解析しようとしています。私は次のメソッドを使用して、任意の特定のノードの子を取得することができますが:RapidXMLパースXML深さ第1モード

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

を私はそれが深さ最初に賢明に解析する方法を見つけ出す傾けます。 RapidXMLは同じもののための組み込みイテレータを提供しません。大規模なXML処理(DOMではSAXではない)のための他のパフォーマンス集約型ライブラリはありますか?

+0

[pugiXML(http://pugixml.org/)非常にパフォーマンスの代替と[それのセクション5.7は、手動'S]れる(http://pugixml.org/docs/manual.html#access.walker )は深度優先のトラバーサルが可能であることを示唆している。 – acraig5075

+0

それはメモリの大規模なDOMを処理することはできますか?それを試してみましょう! –

答えて

1

あなたは、コンテンツのトラバースとXMLの構文解析を混乱しています。

RapidXMLは、それが行くように、オブジェクトツリーを構築し、単一、線形パスでXMLを解析します。次に、ツリーを任意の方法でトラバースできます。

深さ優先探索は通常、再帰的手続きですが、検索中にあなたが示されたコードを使用して、各ノードのすべての兄弟を反復処理されます。違いは、ノードを反復するときに各ノードで行うことです。

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

はそれを得ました!ありがとう:) –

関連する問題