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

标签 xml go

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

所以上周末我编写了一个非常基本的 DOM XML 解析器,它能够解析 DOCX 包中的一个更简单的 XML 文件并将其完整输出。目前我不会关心命名空间、XSLT 或模式验证支持,因为这些对于操作 DOCX 文件没有用处。我的问题是,还有哪些其他 XML 标准和功能对于合并到解析器中很重要?

目前,它实际上只是创建了一棵元素和属性树,我可以对其进行修改和保存。我当前不处理 CDATA 元素或 XML 转义字符(尽管这些很容易做到,我将在本周末进行处理)。

最佳答案

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

对于 XML 解析器功能,我认为必须具备的一些功能是:

  • 处理字符实体(& 符号和数字)、预定义的一般实体(lt、gt、apos、quot)
  • 处理 xml 声明 ()
  • 处理各种输入编码;由 xml 声明或外部声明——太多解析器忽略了这一点,但非常重要,因为 xml 文档可以可靠地检测内部编码。
  • 检查属性值的唯一性
  • 检查元素嵌套是否正确
  • 跳过评论
  • 跳过(如果不处理)处理指令
  • CDATA 处理 - 很简单
  • 跟踪错误报告的行号

其他最终有用的东西是:

  • 命名空间处理
  • 检查内容和名称的字符有效性
  • 按照 xml 规范对 lineefed 进行标准化

关于xml - 基本的 DOM XML 解析器需要什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3713811/

相关文章:

java - 为什么 Transformer 返回 &lt 和 &gt 而不是 < 和 >?

go - 通过缓冲 channel (Golang) 限制并发执行进程的数量

parsing - time.Parse 行为

javascript - 如何使用 Javascript 设置下拉列表的默认值

xml - 使用 MOXy 避免循环,@XmlInverseReference @XmlID

xml - 如何解码 Spray 中的案例类列表

android - SwipeRefreshLayout 只能托管一个直接子节点

mongodb - golang mongo-go-driver无法增加先前的nil值

Golang 入站 channel 未在 goroutine 中接收

c# - 多个线程读取同一个文件