1

私のクラスの 1 つのプロジェクトでは、RapidXML を使用して xml ファイルからデータを解析し、そのデータからツリーを作成する必要があります。私は何日もこれを行う方法について考えてきましたが、ちょうど輪になっています。誰かがこれを概念的に理解するのを手伝ってくれたら本当にありがたいです.

各 xml ノードには名前属性と子ノードがあり、特定のノードの系統にアクセスできるようにしたいので、treeNode クラスには名前変数とその子へのポインターのベクトルがあると思います。この音は今のところ正しいですか?

ノードをキューに追加した後にノードを作成する方法と、これらのノードを使用してツリーを構築する方法について、非常に混乱しています。どのノードがどのノードの子であるかを区別する方法がわかりません。これは、xml ファイルを解析するための方法です。正しく解析して出力しますが、これらのノードをツリー データ構造に格納する方法がわかりません。

void oneQueue(xml_node<> *xml)
{
    //Initialize queue
    queue<xml_node<>* > q;

    int nodesInCurrentLevel =1;
    int nodesInNextLevel =0;
    //push the first xml node onto the queue
    q.push(xml);

    while(!q.empty())
    {
        //grab the xml node at the front of the queue
        xml_node<> *currNode = q.front();
        xml_node<> *name = currNode->first_node("name");

        //make a node from the xml node
        Node *node = new Node();
        //IF the name has a value, set the name
        if(name != 0) node->setName(name->value());
        q.pop();
        nodesInCurrentLevel--;

        if(node)
        {
            cout << node->getName() << endl;
            //loop through the children of the node and add to the queue
            for(xml_node<> * species = currNode->first_node("species"); species; species = species->next_sibling())
            {
                q.push(species);
                nodesInNextLevel++;
            }
        }
        if (nodesInCurrentLevel == 0) {
            nodesInCurrentLevel = nodesInNextLevel;
            nodesInNextLevel = 0;
        }
    }
}   

木は私にとって新しい概念であり、どんなガイダンスも大歓迎です。ありがとう!

4

0 に答える 0