使用老北鼻CharGPT对话查询 Qt/C++ 使用gumbo-parse解析加载的html全过程
    		       		warning:
    		            这篇文章距离上次修改已过454天,其中的内容可能已经有所变动。
    		        
        		                
                
#include <iostream>
#include <gumbo.h>
 
// 假设GumboNodeToString已经实现,用于将Gumbo节点转换为字符串
std::string GumboNodeToString(const GumboNode* node);
 
// 假设GumboOutputFree已经实现,用于释放Gumbo解析输出内存
void GumboOutputFree(GumboOutput* output);
 
// 解析HTML并查询特定标签的函数
std::string queryHtmlTag(const std::string& html, const std::string& tag) {
    // 解析HTML
    GumboOutput* output = gumbo_parse(html.c_str());
    if (!output) {
        return "HTML解析失败";
    }
 
    // 查询特定标签
    std::string result;
    auto root = output->root;
    if (root->type == GUMBO_NODE_DOCUMENT) {
        gumbo_query((GumboNode*)root, [&](GumboNode* node)
            if (node->type == GUMBO_NODE_ELEMENT &&
                tag == GumboStringPieceToString(node->v.element.tag)) {
                result = GumboNodeToString(node);
                return true;  // 找到第一个匹配即停止查询
            }
            return false;
        });
    }
 
    // 清理Gumbo使用的内存
    GumboOutputFree(output);
 
    return result;
}
 
int main() {
    std::string html = "<html><body><p>Hello, world!</p></body></html>";
    std::string tag = "p";
    std::string result = queryHtmlTag(html, tag);
    std::cout << result << std::endl;
    return 0;
}这个例子展示了如何使用Gumbo库来解析HTML并查询特定标签。在实际应用中,你需要实现GumboNodeToString和GumboOutputFree这两个函数,以及gumbo_query的相关实现(这个函数在Gumbo库中不存在,需要自行实现或使用其他方式进行查询)。
评论已关闭