我正在寻找一个易于使用的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解析器,我会非常感激。
答案 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,但多年来一直没有更新。