基本的DOM XML解析器需要什么?

时间:2010-09-15 00:09:52

标签: xml go

我已经开始使用Google的Go语言进行编程了,而我正在尝试编写的软件包是一个用于处理和创建DOCX文件的API(我对这个主题很熟悉并且认为这是学习Go的好方法)。由于DOCX文件主要是一个包含各种XML文件的ZIP文件,我更需要一个DOM XML解析器。但是,我无法找到任何原生的Go DOM XML Parsers,因为我看到的唯一看起来非常有限,可能是SAX解析器(任何使用Go的人,如果我错了就纠错我。)

所以上周末我写了一个非常基本的DOM XML解析器,它能够解析DOCX包中的一个更简单的XML文件并将其原封不输出。目前我不打算使用Namespace,XSLT或架构验证支持,因为这些对操作DOCX文件没有用。我的问题是,将哪些其他XML标准和功能合并到解析器中会很重要?

目前,它只是创建了一个元素和属性树,我可以修改和保存。我目前不处理CDATA元素或XML转义字符(虽然这些很容易做到,本周末我会谈到它)。

2 个答案:

答案 0 :(得分:3)

首先:如果你特意想做DOM解析器,你需要实现DOM API。但我不确定你是否真的这么说;也许你只是指一个生成XML树模型(“dom”)的XML解析器;或只是一个XML解析器? DOM不是唯一的方法。 另请注意,使用SAX解析器实现DOM树模型是最常用的方法;很少有任何DOM包具有嵌入式解析器,通常解析器是单独公开的。

对于XML解析器功能,我认为一些必须做的事情是:

  • 处理字符实体(&符号和数字),预定义的通用实体(lt,gt,apos,quot)
  • 处理xml声明()
  • 处理各种输入编码;由xml声明或外部声明 - 太多的解析器在这方面吝啬,但非常重要,因为xml文档可以在内部可靠地检测编码。
  • 检查属性值的唯一性
  • 检查元素的正确嵌套
  • 发表评论
  • 处理指令的Skippping(如果不处理)
  • CDATA处理 - 操作简单
  • 跟踪错误报告的行号

其他最终有用的东西是:

  • 命名空间处理
  • 检查字符有效性,包括内容和名称
  • 按照xml规范对lineefeds进行规范化

答案 1 :(得分:1)

你看过Go的XML解析器吗? http://golang.org/pkg/xml/

如果它缺少你需要的功能,那么添加它可能比滚动你自己更容易。