代码之家  ›  专栏  ›  技术社区  ›  Costique

用libxml-sax解析HTML片段

  •  2
  • Costique  · 技术社区  · 15 年前

    我需要解析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作为参数。唉,xmlsaxUserParseFile()没有。而那些能够创建DOM的方法似乎都是出于与API设计无关的原因。我错过了一个明显的候选人吗?

    哦,我承认我不愿意使用libxml的dom,这看起来很奇怪。我对RAM有着极大的限制,所以我迫切需要对DOM的完全控制,以便能够在内存不足的情况下丢弃一些节点,并在必要时重新读取它们。

    事先谢谢。

    1 回复  |  直到 15 年前
        1
  •  6
  •   Costique    15 年前

    好吧,既然没人回答这个问题,我会自己试着回答的。

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

    一个主要问题是libxml保留了所有的空白节点,不管是什么。所以我必须解析文本内容以消除可忽略的空白。它很难看,但很管用。我应该提到解析UTF-8是一种你很少错过的乐趣吗?

    老实说,libxml文档非常糟糕。我建议任何一个尝试阅读文档的人:改为阅读源代码。代码的可读性和文档化程度更高。

    谢谢关注。

    推荐文章
    Praxder  ·  SAX XMLParser不工作
    12 年前