2

わかりました、html ドキュメント内のすべてのノードを反復処理し、必要なデータを返すクラスに取り組んできました。これは非常に単純で、Bash でこれを達成しましたが、今は同じものを C++ に移植しようとしています。

libxml サイトの例から始めましたが、この関数をノードごとに実行しましたが、どのように機能するのか理解できません。

関数は次のとおりです。

    static void
print_element_names(xmlNode * a_node)
{
    xmlNode *cur_node = NULL;

    for (cur_node = a_node; cur_node; cur_node = cur_node->next) {
        if (cur_node->type == XML_ELEMENT_NODE) {
            printf("node type: Element, name: %s\n", cur_node->name);
        }

        print_element_names(cur_node->children);
    }
}

基本的に、この関数はノードをポインタに割り当て、すべての兄弟ノードのループを開始しますが、現在のノードに子ノードがある場合は、関数を呼び出してその子ノードでやり直します。これはすべて非常に理解できます。

では、ドキュメント構造を下に移動しますが、構造を元に戻すにはどうすればよいでしょうか?

xmlNode->children は、NULL が検出された場合、次の親ノードを返しますか? 私が知る限り、これは真実ではありませんが、これがどのように機能しているのかわかりません。

やりたいことを実行するクラスを正常に作成しましたが、これよりもはるかに複雑で、約 10 行長くなります。次のノードがnullかどうかを実際に確認し、子がある場合は下に移動するか、ない場合は上に移動して次のノードに移動する必要がありました。

この例ははるかに単純で、コードを改善する方法を理解したいと考えています。

4

2 に答える 2