【发布时间】:2009-10-29 06:33:28
【问题描述】:
给定一个这样的 XML 文档:
<!DOCTYPE doc SYSTEM 'http://www.blabla.com/mydoc.dtd'>
<author>john</author>
<doc>
<title>&title;</title>
</doc>
我想解析上面的 XML 文档并生成它的副本,其中所有实体都已解析。所以给定上面的 XML 文档,解析器应该输出:
<!DOCTYPE doc SYSTEM 'http://www.blabla.com/mydoc.dtd'>
<author>john</author>
<doc>
<title>Stack Overflow Madness</title>
</doc>
我知道您可以实现一个 org.xml.sax.EntityResolver 来解析实体,但我不知道如何使用 正确生成 XML 文档的副本一切仍然完好无损(除了它的实体)。 一切,我指的是空格、文档顶部的 dtd、cmets 以及除之前应该解决的实体之外的任何其他内容。如果这不可能,请提出一种至少可以保留大部分内容的方法(例如,除了没有 cmets 之外的所有内容)。
另外请注意,我仅限于 Sun 提供的纯 Java API,因此此处不能使用第三方库。
非常感谢!
编辑:上面的 XML 文档是其原始文档的简化版本。原始问题涉及使用 EntityResolver 的非常复杂的实体解析,我在这个问题中大大降低了它的重要性。我真正感兴趣的是如何使用使用 EntityResolver 解析实体的 XML 解析器生成 XML 文档的精确副本。
【问题讨论】:
-
精确是什么意思?逐个字符相同?或者,如果 XML 表示相同的意思,是否允许细微的变化? (请参阅我的答案以获取示例。)
-
只要 XML 表示相同的意思,微小的变化应该是可以的。但是,如果解析器可以保留 dtd 以及断线和缩进以保留旧布局,那就太好了。
标签: java xml xml-parsing