使用老北鼻CharGPT对话查询 Qt/C++ 使用gumbo-parse解析加载的html全过程
#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库中不存在,需要自行实现或使用其他方式进行查询)。
评论已关闭