簡體   English   中英

使用libxml SAX解析HTML片段

[英]Parsing HTML fragments with libxml SAX

我需要解析HTML片段,這意味着文件缺少<html>,<head>和<body>元素,否則具有格式正確的XHTML語法,並保證了UTF8編碼。 看來libxml是完成此任務的理想選擇,但是我有一些約束,我只是不知道如何實現。

  1. htmlSAXParseFile()可以很好地完成其工作,但是它似乎可以創建DOM本身,在流程中插入正文html元素。 我想自己創建DOM,因為我可能需要跳過某些元素並即時修改其他元素。 是否有可能以某種方式告訴libxml 根本不創建DOM ,而只是解析HTML並調用我的處理程序?
  2. 如果這對於libxml HTML解析器來說是不可能的,那么我也可以使用xmlSAXUserParseFile(),它似乎不會創建DOM。 但是,由於文件具有類似<p> ... </ p> <p> ... </ p>的結構,因此解析器只是吐出“文檔末尾的額外內容”為時過早。 有沒有辦法在仍然收到通知的情況下抑制某些解析錯誤(只是因為沒有人保證這些文件中永遠不會存在其他錯誤)?
  3. libxml中有很多解析函數,其中一些接受xmlParserOption作為參數。 las,xmlSAXUserParseFile()沒有。 而且,由於某些無關的API設計原因,所有這些似乎都可以創建DOM。 我想念一個明顯的候選人嗎?

哦,我承認我不願使用libxml的DOM看起來很古怪。 我對RAM極為了解,因此迫切需要對DOM進行全面控制,以便能夠在內存不足的情況下刪除某些節點,並在必要時重新讀取它們。

提前致謝。

好的,因為沒有人回答這個問題,所以我會嘗試自己解決。

我編寫了所有開始/結束元素處理程序,看起來libxml不再創建DOM。 至少,返回的文檔指針為NULL。 它仍然堅持html和body元素,但是我可以接受。

一個主要問題是libxml保留所有空白節點,無論如何。 因此,我必須解析文本內容以消除可忽略的空白。 很難看,但是可以用。 我應該提到解析UTF-8是您很少錯過的樂趣嗎?

老實說,libxml文檔是殘酷的。 我對任何嘗試閱讀文檔的人的建議:改為閱讀源代碼。 該代碼更易於閱讀和記錄。

感謝您的關注。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM