1

我正在从 XML 文档加载一些数据,对其进行修改,然后写回 XML。读取是使用 SAX 解析器库完成的,而写入是使用一段自定义代码完成的。有时,文件会在外部进行修改,并添加额外的元素(例如对样式表的引用)。我不想在加载和保存文件时丢失这些额外的元素,而是希望通过任何未知标签以便它们出现

当未知元素与解释元素分开时,将未知元素和属性保存为字符串并在之后输出它们应该很简单,但是当它们散布并嵌套在解释元素中时,它就变得不那么明显了。

任何人都可以提出一个简洁的方法来做到这一点吗?切换到 DOM 解析器会更简单吗?性能不是问题。

注意。我正在使用 Gnome Glib::Markup::Parser 使用 C++,但更喜欢与语言/库无关的答案。

4

2 回答 2

1

我不知道您是如何编写内容处理程序的,但是应该在所有事件上调用它的方法,包括您要保留的外部修改。你startElement()endElement()回调可以测试元素名称和属性来决定是否对要修改的元素调用专门的方法,但默认情况下只是重建并输出调用回调的事件。这样,您没有专门处理的任何元素都会默认获得输出。

您也可以在 XSLT 中做同样的事情。进行一个身份转换(一个样式表,它准确地输出输入的内容)并向其添加具有更具体匹配表达式的模板,以进行自定义修改。对于大多数应用程序,我发现 XSLT 比 SAX 或 DOM 更易于使用。

于 2008-10-30T18:50:10.587 回答
0

当您想要修改 xml 文件并在更改后将其保存回其他文件时,我相信 SAX 不是正确的方法。我的建议是使用 DOM。它将加载整个文件(包括外部所做的修改),因此您只需考虑您想要做什么。之后保存时,一切都会恢复原状。

于 2008-10-31T09:11:44.017 回答