2

我正在尝试编写一个小程序来使用 libxml2 从网页中提取一些数据。由于数据在 HTML 文件中是本地的,因此我决定使用以下内容作为起点,将 HTML 转换为可遍历的内存结构:

int main(int argc, char* argv[])
{
    htmlDocPtr dp = htmlReadFile(argv[1], NULL, HTML_PARSE_RECOVER | HTML_PARSE_NONET );

但是,当我运行这个将 HTML 文件作为参数传递时,我得到一个错误:

HTML parser error : htmlParseEntityRef: expecting ';'

它似乎在抱怨以下内容:

<a href="do_something.html?a=1&b=2"> some stuff </a>

即,与其忽略href属性的内容或将其视为带有参数的 URL,它似乎将来自的位&b视为像&name;这样的实体引用。并抱怨没有分号。这肯定不对吧?我应该做一些不同的事情来让它忽略这个(无论如何我对这些标签都不感兴趣)还是我只是以某种方式错过了重点?

4

1 回答 1

1

您的输入文件无效,因为它包含无效的 url。请参阅RFC 3986 - 保留字符中的第 2.2 点。应该使用百分号转义和问号来转义与号。合法的 url 如下所示:

<a href="do_something.html%3Fa%3D1%26b%3D2"> some stuff </a>

但这只是尝试解析 html 时的一长串陷阱之一。通常的方法是使用一个整理库,见这个问题:Parse html using C。目标是在实际解析之前清除 html 中的错误。

于 2012-11-11T21:41:45.160 回答