わかりました、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かどうかを実際に確認し、子がある場合は下に移動するか、ない場合は上に移動して次のノードに移動する必要がありました。
この例ははるかに単純で、コードを改善する方法を理解したいと考えています。