gpt4 book ai didi

java - 如何生成包含已解析实体的 XML 文档的*精确*副本

转载 作者:行者123 更新时间:2023-12-02 08:36:23 28 4
gpt4 key购买 nike

给定一个像这样的 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、注释以及除之前应该已解决的实体之外的任何其他内容。如果这是不可能的,请建议一种至少可以保留大部分内容的方法(例如,除了没有评论之外的所有内容)。

另请注意,我仅限于 Sun 提供的纯 Java API,因此此处不能使用第三方库。

非常感谢!

编辑:上面的 XML 文档是其原始文档的简化版本。最初的涉及使用 EntityResolver 进行非常复杂的实体解析,我在这个问题中大大降低了其重要性。我真正感兴趣的是如何使用 EntityResolver 解析实体的 XML 解析器生成 XML 文档的精确副本。

最佳答案

几乎可以肯定,使用我听说过的任何 XML 解析器都无法做到这一点,当然 Sun XML 解析器也无法做到这一点。他们会很乐意丢弃那些对于 XML 的含义而言没有意义的细节。例如,

<title>Stack Overflow Madness</title>

<title >Stack Overflow Madness</title >

从 XML 语法的角度来看,它们是无法区分的,Sun 解析器(正确地)将它们视为相同。

我认为您的选择是将 XML 作为文本进行替换(如 @Wololo 建议)或放宽您的要求。

顺便说一句,您可以独立于 XML 解析器使用 XmlEntityResolver。或者创建一个执行相同操作的类。这可能意味着 String.replace... 不是答案,但您应该能够实现一个临时扩展器,它迭代字符缓冲区中的字符,将它们扩展为第二个字符.

关于java - 如何生成包含已解析实体的 XML 文档的*精确*副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1641944/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com