你如何构建XML解析器?

时间:2011-02-12 23:37:33

标签: xml parsing xml-parsing

任何人都可以指导我构建XML解析器的好教程吗?我意识到大多数语言已经有了库来完成这项任务,但我有兴趣了解XML的语法和解析器工作原理。我已经尝试过寻找能够解释这一点的东西但却找不到任何东西。

3 个答案:

答案 0 :(得分:1)

为了说清楚,你应该从来没有尝试编写一个XML解析器用于生产。这是

  1. 对大多数人来说很复杂,真的很难做对,
  2. 解决了任何语言的问题。
  3. 为了概述XML,我建议你在O'Reilly上阅读“XML In A Nutshell”,并尝试用XML和XML转换。对于一般的解析器构建,Parsing Techniques看起来很有希望。但实际上解析XML相当困难,所以你应该从使用它获取知识开始。在该领域,文档也不那么稀疏......

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

另一个要阅读的内容显然是XML规范。它是IMO最精心编写的规范之一;准确而完整,即使不完全轻松阅读。但考虑到所有内容,实际上并不是那么长。