c - 决定是使用 DOM、SAX 还是 XPath 的因素

标签 c xml libxml2

我的代码处于一种奇怪的状态。我正在编写一个 Apache 模块,需要在响应文档的 head 标记中添加注释(除了做一些其他不重要的事情)。

在我需要解析响应文档的地方,我将整个文档以 char * 缓冲区的形式存储在内存中(我使用的是 C)。所以我不太确定选择哪个 API?

据我所知,DOM 将在内存中创建自己的文档树表示形式。我可以通过释放较早的缓冲区来节省一些内存空间。

SAX:我真的不是很懂。

XPath- 正如我所搜索的那样,我相信它只能用于检索元素值。如果这是真的,那我就没用了。

给我一​​些见解,什么最适合当前情况?

最佳答案

就使用 XML(或 HTML)和 Apache 而言,如果您做的事情足够简单,例如在文档中的特定位置插入注释,那么使用 XSL 可能会更有效。这 native 处理 XML 样式的文档,HTML 和 XHTML 是其中的一个子集,无需将它们转换为其他格式以更轻松地与其他编程语言一起工作。另一方面,DOM 和 SAX 解析都以更易于处理的方式考虑 XML 文档,分别通过将其转换为特定语言的 native 对象,或注册您的代码可以处理的“事件” .

有关 XSL 的更多信息,请查看 http://www.w3schools.com/xsl/ .

一个额外的想法——如果你真的在做一些基本的事情,比如向头部添加注释,那么使用 SAX 解析比 DOM 解析更有效,因为简单的编辑不需要解析整个文档。它宁愿通过等待到达“head”元素的适当事件然后添加任何你想要的东西来更优雅地处理。

关于c - 决定是使用 DOM、SAX 还是 XPath 的因素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3093196/

相关文章:

计算给定字符集的所有组合,用于暴力匹配?

c - 简单的有线协议(protocol),一个人要做什么?

java - 如何更改应用程序头部的副标题

c - 如何修复由 realloc 越界引起的段错误?

c++ - 如何在 cpp 中使用 libxml2 创建 DOM

C - 构建/编译/部署成功但在其他机器上失败

c - 从文件读取时如何处理数据或字符-1,因为EOF也是-1

android - 如何在 activity(dot)xml 中包装 android 代码

xml - XSLT 与 LaTeX

iphone - 如何在保持段落格式的同时将 HTML 解析为纯文本