2012-11-09 48 views
2

我正試圖編寫一個小程序,使用libxml2從網頁中提取一些數據。由於數據是在一個HTML文件的地方,我決定使用以下爲出發點,以獲得HTML到一筆畫存儲結構:使用libxml2解析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;並抱怨沒有分號。當然,這是不正確的?我是否應該做一些不同的事情來讓它忽略這一點(我對這些標籤無論如何都不感興趣),還是隻是以某種方式錯過了這一點?

回答

1

您的輸入文件無效,因爲它包含無效的網址。見point 2.2 in RFC 3986 - Reserved characters。應該使用百分號轉義符號和問號符號來避開「與」符號。一個合法的url看起來是這樣的:

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

但它只是試圖解析html時的一長串陷阱之一。通常的做法是使用整理庫,看到這個問題:Parse html using C。目標是在實際解析之前清除html中的錯誤。

+0

是的,你說得對。這不是這個(據說是xhtml符合性)頁面中的第一個錯誤。非常感謝鏈接 - 我會跟着他們。 –