• HTML解析,为啥常规解析器都不适用?

    非与上下文无关的语法
    服务器君一共花费 26.491 ms 进行了 2 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    HTML 解析器

    HTML 解析器的任务是将 HTML 标记解析成解析树。

    HTML解析是非与上下文无关的语法

    在一般解析过程中,语法可以用 BNF 等格式进行正式定义。很遗憾,所有的常规解析器都不适用于 HTML(我并不是开玩笑,它们可以用于解析 CSS 和 JavaScript)。HTML 并不能很容易地用解析器所需的与上下文无关的语法来定义。

    有一种可以定义 HTML 的正规格式:DTD(Document Type Definition,文档类型定义),但它不是与上下文无关的语法。

    这初看起来很奇怪:HTML 和 XML 非常相似。有很多 XML 解析器可以使用。HTML 存在一个 XML 变体 (XHTML),那么有什么大的区别呢?

    区别在于 HTML 的处理更为“宽容”,它允许您省略某些隐式添加的标记,有时还能省略一些起始或者结束标记等等。和 XML 严格的语法不同,HTML 整体来看是一种“软性”的语法。

    显然,这种看上去细微的差别实际上却带来了巨大的影响。

    一方面,这是 HTML 如此流行的原因:它能包容您的错误,简化网络开发。另一方面,这使得它很难编写正式的语法。

    概括地说,HTML 无法很容易地通过常规解析器解析(因为它的语法不是与上下文无关的语法),也无法通过 XML 解析器来解析。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [移动开发] Android属性系统Property 9 个条目
  2. [Python程序设计] Django架构流程分析 7 个条目
  3. [软件工程与项目管理] 呈现树的构建 13 个条目
  4. [Linux操作系统] 基本 Linux Shell 命令 2 个条目
  5. [移动开发] 使用support-v7 ActionBar前的那些坑 3 个条目
  6. [JavaScript程序设计] 关于HTTP Keep-Alive 6 个条目
  7. [移动开发] Android里的ContentValues 2 个条目
  8. [PHP程序设计] PHP里的布尔类型 3 个条目
  9. [Linux操作系统] CentOS上使用EPEL Repository 2 个条目
  10. [Python程序设计] Python HTTP服务器 7 个条目
  11. [软件工程与项目管理] 浏览器与CSS渲染技巧 2 个条目
  12. [PHP程序设计] htaccess 设置技巧 6 个条目
窗口 -- [博客]