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

    非与上下文无关的语法
    服务器君一共花费 12.646 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. [PHP程序设计] PHP与Stream流 5 个条目
  2. [移动开发] Content Provider内容提供者 3 个条目
  3. [Python程序设计] Python Web部署的背景知识 9 个条目
  4. [PHP程序设计] PHP数组探索 4 个条目
  5. [PHP程序设计] PHP里的引用 5 个条目
  6. [移动开发] 刷机与root相关 2 个条目
  7. [数据库技术] 无限级分类数据表设计 4 个条目
  8. [智力开发与知识管理] 信息的类型与结构 9 个条目
  9. [数据结构] 图的定义 1 个条目
  10. [移动开发] 从代码角度去认识 Handler 4 个条目
  11. [移动开发] Android抽屉导航NavigationDrawer 5 个条目
  12. [Python程序设计] Django架构流程分析 7 个条目
窗口 -- [八点]