• HTML解析里的标记化算法

    根据HTML标记解析DOM
    服务器君一共花费 7.289 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    标记化算法的输出结果是 HTML 标记。

    该算法使用状态机来表示。每一个状态接收来自输入信息流的一个或多个字符,并根据这些字符更新下一个状态。当前的标记化状态和树结构状态会影响进入下一状态的决定。这意味着,即使接收的字符相同,对于下一个正确的状态也会产生不同的结果,具体取决于当前的状态。该算法相当复杂,无法在此详述,所以我们通过一个简单的示例来帮助大家理解其原理。

    <html>
      <body>
        Hello world
      </body>
    </html>
    

    初始状态是数据状态。遇到字符 < 时,状态更改为“标记打开状态”。接收一个a-z字符会创建“起始标记”,状态更改为“标记名称状态”。这个状态会一直保持到接收 > 字符。在此期间接收的每个字符都会附加到新的标记名称上。

    在本例中,我们创建的标记是html标记

    遇到 > 标记时,会发送当前的标记,状态改回“数据状态”。<body> 标记也会进行同样的处理。目前 html 和 body 标记均已发出。现在我们回到“数据状态”。接收到 Hello world 中的 H 字符时,将创建并发送字符标记,直到接收 </body> 中的 < 。我们将为 Hello world 中的每个字符都发送一个字符标记。

    现在我们回到“标记打开状态”。接收下一个输入字符 / 时,会创建 end tag token 并改为“标记名称状态”。我们会再次保持这个状态,直到接收 >。然后将发送新的标记,并回到“数据状态”。</html> 输入也会进行同样的处理。

    对示例输入进行标记化
更多 推荐条目

Welcome to NowaMagic Academy!

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

本章最新发布
随机专题
  1. [Python程序设计] Python HTTP服务器 7 个条目
  2. [运维管理] 防火墙原理与应用 5 个条目
  3. [Python程序设计] Tornado表单处理 3 个条目
  4. [移动开发] Android开发基础知识 4 个条目
  5. [Python程序设计] Django后台管理系统 2 个条目
  6. [Python程序设计] Django数据库模型 6 个条目
  7. [Python程序设计] Django模板系统 11 个条目
  8. [PHP程序设计] PHP数组的遍历 7 个条目
  9. [移动开发] Android SQLite增删查改实例(数据:魔弹之王) 2 个条目
  10. [Python程序设计] 从PHP到Python 3 个条目
  11. [移动开发] 从代码角度去认识 Handler 4 个条目
  12. [PHP程序设计] PHP与函数式编程 1 个条目
窗口 -- [八点]