gpt4 book ai didi

C++ libxml xmlNode->children

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:51:04 28 4
gpt4 key购买 nike

好的,我一直在研究一个类来遍历 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 行。实际上,我必须检查下一个节点是否为空,如果它有子节点则向下导航,如果没有则向上导航并返回到下一个节点。

这个例子要简单得多,我想了解如何使我的代码更好。

最佳答案

  1. 所以它会降低文档结构,但它如何导航回结构?
    您发布的是递归函数。从您问题的性质来看,我假设您不太了解递归是什么/它是如何工作的。快速谷歌搜索应该会给你一些很好的信息/例子。

  2. xmlNode->children找到NULL时是否返回下一个父节点?
    我假设 xmlNode->children 返回一个指向包含当前节点的所有子节点的链表的指针。如果当前节点没有 child ,它可能会返回 NULL。

  3. 这个例子要简单得多,我想了解如何使我的代码更好。
    我假设你写的类是纯粹迭代的。递归函数可以极大地简化代码,但在性能方面它们可能会在更大的数据集上引起问题。我绝对会推荐阅读它们;他们会很有趣。

关于C++ libxml xmlNode->children,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15817456/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com