0

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

链接器标志:

-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 解析器,我将非常感激。

4

3 回答 3

1

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

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

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

于 2012-08-21T22:51:29.073 回答
0

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

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

<img src="foo.jpg">
于 2012-08-21T22:52:52.507 回答
0

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

于 2012-08-21T23:33:01.513 回答