【问题标题】:How do you build an XML parser?如何构建 XML 解析器?
【发布时间】:2011-06-26 06:22:34
【问题描述】:

谁能指导我学习构建 XML 解析器的好教程?我意识到大多数语言已经有库来完成这项任务,但我有兴趣了解 XML 的语法和解析器工作原理背后的理论。我尝试搜索可以解释这一点的内容,但找不到任何内容。

【问题讨论】:

  • 转到amazon.com 并在搜索框中输入“解析”。真的。
  • 实际上,虽然通常这是一个很好的建议,但我实际上建议不要这样做。尽管 xml 处理工具被称为“解析器”,但它们实际上主要是词法分析器(标记器)、少量解析(匹配嵌套元素,仅此而已),以及许多其他东西(符号表处理;DTD 处理)。所以很少使用正确的解析器编写技术(yacc);尽管状态机可以提供帮助,但设计往往也会在这里走捷径。

标签: xml parsing xml-parsing


【解决方案1】:

我认为编写此类教程的人需求不足;正如我评论的那样,我认为一般的解析器技术没有多大帮助。 XML 解析器不是通常的 lex+yacc 方法工作得很好(lexer 部分比解析器更多,这是值得的)。

我知道大多数生产就绪的 XML 解析器都是野兽,但您最好还是开始阅读一个。 Java 有一些示例,xmlpull 可能是最简单的正确解析器之一。 Woodstox 和 Xerces 是最兼容(“完整”)的解析器,具有大型代码库,因此绝对不是轻读。但是它们处理 XML 解析器应该处理的所有事情,因此它们也可能具有教育意义。 但要小心那些跳过检查 XML 规范要求的东西的半支持假解析器(例如,Javolution 只检查很少的东西,例如没有字符有效性检查或属性名称重复)。

要阅读的另一件事显然是 XML 规范。它是 IMO 写得最好的规范之一;准确和完整,即使不是很轻的读数。但考虑到它涵盖的所有内容,它实际上并没有那么长。

【讨论】:

    【解决方案2】:

    如果您是计算机科学专业的学生,​​并且喜欢编写 XML 解析器作为学术练习,那很好:这是度过一个潮湿周末的好方法,而且您不需要问这个问题,因为您可以访问到一个关于如何编写解析器的教科书库,如果你有特定的 XML 相关问题,那么你可以随时查看各种开源解析器的代码,看看专家是如何解决问题的。

    如果您不是计算机科学专业的学生,​​那么我建议您成为计算机科学专业的学生 - 如何为不同类别的语法编写解析器的理论是该学科基础的一部分。

    【讨论】:

      【解决方案3】:

      为了清楚起见,您应该永远不要尝试编写一个用于生产的 XML 解析器。这是

      1. 对于大多数人来说是一种复杂的方式,而且真的很难做到正确和
      2. 用任何语言解决的问题。

      为了获得 XML 的概述,我建议您阅读 O'Reilly 上的“XML In A Nutshell”,并尝试使用 XML 和 XML 转换来做一些事情。对于一般的解析器构建,Parsing Techniques 看起来很有希望。但实际上解析 XML 是相当困难的,因此您可能应该从使用它获取知识开始。此外,该领域的文档也少得多......

      【讨论】:

      • 垃圾。它只是乏味不难。 XML 是一个让解析器 80% 正确的领域,这使得它对于大多数用例都非常有用。尽管事实证明编写 XML 解析器是不必要的,因为大多数语言都有许多优秀的 100% 完整的解析器——就像你说的那样。
      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 2013-08-02
      • 2011-02-24
      • 2013-06-30
      • 1970-01-01
      • 2010-12-08
      • 2020-01-17
      • 2011-06-17
      相关资源
      最近更新 更多