好的,我一直在研究一个类来遍历 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 行。实际上,我必须检查下一个节点是否为空,如果它有子节点,则向下导航,如果没有,则向上导航到下一个节点。
这个例子要简单得多,我想了解如何使我的代码更好。