任何人都可以指导我构建 XML 解析器的好教程吗?我意识到大多数语言已经有库来完成此任务,但我有兴趣了解 XML 语法以及解析器如何工作背后的理论。我尝试寻找一些可以解释这一点的东西,但一直找不到任何东西。
为了明确起见,您应该永远不要尝试编写要在生产中使用的 XML 解析器。这是
为了获得 XML 的概述,我建议您阅读 O'Reilly 上的“XML In A Nutshell”,并尝试使用 XML 和 XML 转换进行操作。对于一般的解析器构建,解析技术看起来非常有前途。但实际上解析 XML 相当困难,因此您可能应该从使用它来获取知识开始。而且该领域的文档也少得多......
我认为人们编写此类教程的需求还不够;正如我所评论的,我认为一般的解析器技术没有多大帮助。 XML 解析器不是通常的 lex+yacc 方法,效果很好(词法分析器比解析器更重要,就其价值而言)。
我知道大多数生产就绪的 XML 解析器都是野兽,但您最好开始阅读一个。 Java 有一些示例,xmlpull 可能是最简单的正确解析器之一。 Woodstox 和 Xerces 是最合规(“完整”)的解析器,具有庞大的代码库,因此绝对不是轻松阅读。但它们可以处理 XML 解析器应该处理的所有事情,因此它们也可能具有教育意义。 但要小心半支持的假解析器,它们会跳过对 XML 规范要求的内容的检查(例如 Javolution 检查很少的内容,例如没有字符有效性检查或属性名称重复)。
另一件需要阅读的内容显然是 XML 规范。在我看来,它是编写得最好的规范之一;准确且完整,即使不是完全轻松的阅读。但考虑到它涵盖的所有内容,实际上并没有那么长。
如果您是计算机科学专业的学生,并且喜欢编写 XML 解析器作为学术练习,那么很好:这是度过一个潮湿的周末的好方法,而且您不需要问这个问题,因为您可以访问关于如何编写解析器的教科书库,如果您有特定的 XML 相关问题,那么您可以随时查看各种开源解析器的代码,看看专家是如何解决该问题的。
如果您不是计算机科学专业的学生,那么我建议您成为计算机科学专业的学生 - 如何为不同类别的语法编写解析器的理论是该学科基础的一部分。