在SAX解析器中传递未知的XML元素

时间:2008-10-30 16:34:30

标签: xml sax

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

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

有人可以建议一种简洁的方法来做到这一点吗?切换到DOM解析器会更简单吗?表现不是问题。

NB。我使用Gnome Glib :: Markup :: Parser在C ++中工作,但更喜欢语言/库无关的答案。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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