使用libxml SAX解析HTML片段

Cos*_*que 2 html c sax libxml2

我需要解析HTML片段,我的意思是文件缺少<html>,<head>和<body>元素,否则具有格式良好的XHTML语法,保证UTF8编码.看起来libxml对于这个任务来说是理想的,但我有一些我不知道如何实现的约束.

  1. htmlSAXParseFile()可以很好地完成它的工作,但它似乎创建了DOM本身,在进程中插入了bodyhtml元素.我想自己创建DOM,因为我可能需要跳过一些元素并动态修改其他元素.有可能以某种方式告诉libxml 根本不创建DOM而只是解析HTML并调用我的处理程序吗?
  2. 如果这对于libxml HTML解析器是不可能的,我不妨使用似乎不创建DOM的xmlSAXUserParseFile().但是,由于文件的结构类似于<p> ... </ p> <p> ... </ p>,因此解析器过早地吐出"文档末尾的额外内容".有没有办法抑制一些解析错误,同时仍然得到通知他们(只是因为没有人保证这些文件中永远不会有其他错误)?
  3. 有分析中的libxml功能,其中一些接受xmlParserOption作为参数的整个赫克.唉,xmlSAXUserParseFile()没有.那些完成所有这些似乎都是为了一些不相关的API设计原因而创建DOM.我错过了一个明显的候选人吗?

哦,我承认我不愿意使用libxml的DOM看起来像怪癖.我对RAM非常有限,因此我迫切需要对DOM进行全面控制才能在低内存条件下丢弃某些节点并在必要时重新读取它们.

提前致谢.

Cos*_*que 6

好的,既然没有人回答这个问题,我会尝试自己做.

我编写了所有的开始/结束元素处理程序,看起来libxml不再创建DOM了.至少,返回的文档指针为NULL.它仍然坚持HTML和身体元素,但我可以忍受.

一个主要问题是libxml保留所有空白节点,无论如何.所以我必须解析文本内容以消除可忽略的空白.这很难看,但它确实有效.我是否应该提到解析UTF-8是你很少想念的那种乐趣?

说实话,libxml文档非常糟糕.我建议任何尝试阅读文档的人:改为阅读源代码.代码更具可读性和文档性.

谢谢你的关注.