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

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

    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. [Python程序设计] Tornado表单处理 3 个条目
  2. [移动开发] 从代码角度去认识HttpClient 2 个条目
  3. [移动开发] Android Studio的使用技巧 4 个条目
  4. [Python程序设计] Tornado背景知识介绍 4 个条目
  5. [数据库技术] MySQL中英文混合排序 4 个条目
  6. [移动开发] Android View注入框架Butter Knife 3 个条目
  7. [PHP程序设计] PHP数组的遍历 7 个条目
  8. [PHP程序设计] 命令式编程范式 6 个条目
  9. [Python程序设计] 从PHP到Python 3 个条目
  10. [JavaScript程序设计] Web实时通信技术名词解析 5 个条目
  11. [软件工程与项目管理] 了解一点WebKit 9 个条目
  12. [Python程序设计] Django 入门知识浅介 10 个条目
窗口 -- [协会]