これは、私の以前の質問の 1 つに関連しています。XMLファイルからツリーを構築しようとしています。xml ファイルを調べて、データからオブジェクトを作成し、ツリー オブジェクトを構築できるように、オブジェクトのベクトルを preorder と inorder で作成する予定です。私が使用している xml ファイルは、これよりもはるかに高密度 (約 23 レベル程度) ですが、レイアウトの例を次に示します。
<?xml version="1.0" encoding="utf-8"?>
<MyJournal>
<species>
<name>Sea Creature</name>
<species>
<name>Fish</name>
<species>
<name>swordfish</name>
</species>
<species>
<name>grouper</name>
</species>
</species>
<species>
<name>Mammal</name>
<species>
<name>dolphin</name>
</species>
<species>
<name>whale</name>
</species>
</species>
</species>
<species>
<name>Land animal</name>
<species>
<name>Mammal</name>
<species>
<name>dog</name>
</species>
<species>
<name>cat</name>
</species>
</species>
<species>
<name>Bird</name>
<species>
<name>blue jay</name>
</species>
<species>
<name>robin</name>
</species>
</species>
</species>
</MyJournal>
私の事前注文と事後注文の方法。ルート ノード「MyJournal」が最初に渡されます。
void preOrder(xml_node<> *species) // add to left node
{
Node t1 = *new Node();
xml_node<> * name_node = species->first_node("name");
//If there is a value for name, set the name of the node to this name
if(name_node != 0)
{
t1.setName(name_node->value());
cout << t1.getName() << " ";
}
//If there is no name node, print the default name which is "ROOT"
if(name_node == 0)
{
cout << t1.getName() << " ";
}
for (xml_node<> * child_node = species->first_node("species"); child_node; child_node = child_node->next_sibling())
{
loop2(child_node); // add these to right node
}
}
void postOrder(xml_node<> *species) // add to left node
{
Node t1 = *new Node();
for (xml_node<> * child_node = species->first_node("species"); child_node; child_node = child_node->next_sibling())
{
loop3(child_node); // add these to right node
}
xml_node<> * name_node = species->first_node("name");
if(name_node != 0)
{
t1.setName(name_node->value());
cout << t1.getName() << " ";
}
if(name_node == 0)
{
cout << t1.getName() << " ";
}
}
これまでのところ、ファイルを調べて、前後の順序でオブジェクトを取得することはできますが、関数を再帰的に呼び出すための左または右のポインターがないため、データを順序どおりに取得する方法がわかりません。これについてどうすればよいか、誰かが私にいくつかのガイダンスを教えてもらえますか? この方法でデータを取得し、ツリー構造を正常に構築することは可能ですか? 助けてくれてありがとう!