C语言的HTML解析器

C语言的HTML解析器,c,xml-parsing,libxml2,C,Xml Parsing,Libxml2,我正在寻找一个易于使用的html解析器库。目前我正在尝试设置libxml2,但遇到了令人沮丧的问题。我使用的IDE是Pelles C,我将libxml2的windows文件放在适当的文件夹中(标题在正确的标题区域,二进制文件在bin中,libs在库中等等),但每当我试图编译程序时,编译器都会告诉我,我调用的每个libxml2函数都是未定义的。例如: 链接器标志: -子系统:控制台-机器:amd64 kernel32.lib advapi32.lib delayimp64.lib Ws2_32.l

我正在寻找一个易于使用的html解析器库。目前我正在尝试设置libxml2,但遇到了令人沮丧的问题。我使用的IDE是Pelles C,我将libxml2的windows文件放在适当的文件夹中(标题在正确的标题区域,二进制文件在bin中,libs在库中等等),但每当我试图编译程序时,编译器都会告诉我,我调用的每个libxml2函数都是未定义的。例如:

链接器标志:

-子系统:控制台-机器:amd64 kernel32.lib advapi32.lib delayimp64.lib Ws2_32.lib libxml2.lib

代码:

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);
}
}

int main(void)
{
xmlDoc *doc = NULL;
xmlNode *root_element = NULL;

LIBXML_TEST_VERSION
doc = xmlReadFile("XMLFILE"/*XML_FILE PUT HERE*/, NULL, 0);
if (doc != NULL) printf("error: could not parse file");
root_element = xmlDocGetRootElement(doc);
print_element_names(root_element);
xmlFreeDoc(doc);
xmlCleanupParser();

return 0;
}
在尝试编译时,仅给出以下错误:

POLINK: error: Unresolved external symbol 'xmlCheckVersion'.
POLINK: error: Unresolved external symbol 'xmlReadFile'.
POLINK: error: Unresolved external symbol 'xmlDocGetRootElement'.
POLINK: error: Unresolved external symbol 'xmlFreeDoc'.
POLINK: error: Unresolved external symbol 'xmlCleanupParser'.
POLINK: fatal error: 5 unresolved external(s).

这种情况让我发疯,如果有人能帮我解决这个问题,或者建议一个更容易设置的html解析器,我将不胜感激。

这些错误与链接阶段有关:无论你使用什么库,都会给你同样的问题

除非您安装了错误的软件包(例如64位库而不是32位库,反之亦然)


对于XML解析来说,libxml2是一个非常有用的工具,它非常快速而且非常强大。鉴于您已经开始使用它,我将尝试解决链接器问题。

我曾经使用过Mini-XML。它使用ANSI C编译器编译。

但是,您应该小心,因为解析HTML与解析XML不同。例如,在HTML中,您可以在不关闭标记的情况下拥有标记。例如:

<img src="foo.jpg">


我尝试了一个名为html2cxx的工具来解析html。它可以很好地解析html和css1.0,尽管已经有几年没有更新了

HTML还是XML?HTML不是XML。那你为什么要尝试使用XML库来解析它呢?如果你想得到诚实的答案,我不知道,似乎我犯了一个令人尴尬的错误。我现在正在搜索一个html解析器,谢谢你让我走上正确的轨道。没问题。使用libxml仍然是一个有效的问题,但我只是想提醒您,它可能无法解决解析html的问题。请注意,解析html比解析xml困难得多。链接阶段意味着什么?我有点困惑到底是什么导致了这个问题,我在一台64位的机器上运行64位的Pelles C ide?那么,如果这是一个连接阶段,我该如何解决这个问题呢?在这一点上,我感到完全不知所措。Pelles IDE将首先将C源代码转换为目标代码,显然这样做没有错误。然后,它将尝试通过查看可用的库来解析引用——这就是它失败的地方。对于GCC,我有时不得不以不同的顺序指定库;试试看,也许佩尔斯也是这样。否则,我会检查二进制lib文件是否适合体系结构(顺便说一句,它不应该是DLL吗?)。对不起,我不知道还能尝试什么。但请放心,这不是libxml2的错:-)我知道这是我做错了什么,但我也不知道:p符号名称似乎是正确的,并且与库()匹配。尝试更改链接器标志并将libxml2移动到其他库之前。你在/lib中复制了zip的/lib目录中的所有文件,是吗?是的,我复制了,我也尝试了移动标志,我尝试了libxml2.lib和libxml2_a.lib,但都不能正常工作,我有一个所有箱子的备份,包括,还有Pelles C附带的libs和默认文件的备份,以及我从libxml2添加的文件。在这种情况下,我正在寻找html是否有适用于windows的html解析器库?如果您希望解析器健壮,我认为您应该查看webkit的源代码。