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

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

    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. [C语言程序设计] C语言里的全局变量 2 个条目
  2. [移动开发] 从代码角度去认识HttpClient 2 个条目
  3. [移动开发] 使用support-v7 ActionBar前的那些坑 3 个条目
  4. [移动开发] Content Provider内容提供者 3 个条目
  5. [软件工程与项目管理] 呈现器的布局与绘制 11 个条目
  6. [PHP程序设计] PHP中的Hash算法 3 个条目
  7. [移动开发] 从代码角度去认识 Handler 4 个条目
  8. [Python程序设计] Django与表单 4 个条目
  9. [移动开发] Android View注入框架Butter Knife 3 个条目
  10. [智力开发与知识管理] 整体性学习策略 9 个条目
  11. [移动开发] Android布局基本知识 3 个条目
  12. [PHP程序设计] 编程范式初探 3 个条目
窗口 -- [协会]