用于C的HTML解析器

时间:2012-08-21 22:43:06

标签: c xml-parsing libxml2

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

Linker Flags:

-subsystem:console -machine: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解析器,我会非常感激。

3 个答案:

答案 0 :(得分:1)

这些错误与链接阶段有关:您使用的任何库都会给您带来相同的问题。

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

对于XML解析,libxml2是一个非常有用的工具,它非常快且非常强大。看看你是如何开始的,我会尝试解决链接器问题。

答案 1 :(得分:0)

我曾经使用过Mini-XML。它使用ANSI C编译器进行编译。 http://www.minixml.org/

但是你应该小心,因为解析HTML与解析XML不同。例如,在HTML中,您可以使用标签而不关闭它们。例如:

<img src="foo.jpg">

答案 2 :(得分:0)

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