首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何生成具有解析实体的XML文档的**副本

如何生成具有解析实体的XML文档的**副本
EN

Stack Overflow用户
提问于 2009-10-29 06:33:28
回答 2查看 295关注 0票数 0

给定这样的XML文档:

代码语言:javascript
复制
 <!DOCTYPE doc SYSTEM 'http://www.blabla.com/mydoc.dtd'>
 <author>john</author>
 <doc>
   <title>&title;</title>
 </doc>  

我想解析上面的XML文档并生成它的副本,并且它的所有实体都已经解决了。因此,考虑到上面的XMl文档,解析器应该输出:

代码语言:javascript
复制
 <!DOCTYPE doc SYSTEM 'http://www.blabla.com/mydoc.dtd'>
 <author>john</author>
 <doc>
   <title>Stack Overflow Madness</title>
 </doc>  

我知道您可以实现一个org.xml.sax.EntityResolver来解析实体,但我不知道的是如何正确地生成everything仍然完好无损的副本(除了实体)。所谓everything,我指的是空白空间、文档顶部的dtd、注释和任何其他东西,除了应该在前面解决的实体之外。如果这是不可能的,请建议一种至少可以保存大部分东西的方法(例如,除了没有评论外)。

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

非常感谢!

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-29 06:51:36

您几乎肯定不能使用我听说过的任何XML解析器来完成这一任务,当然Sun XML解析器也无法做到这一点。对于XML的意义,他们会很高兴地抛弃那些没有意义的细节。例如,

代码语言:javascript
复制
<title>Stack Overflow Madness</title>

代码语言:javascript
复制
<title >Stack Overflow Madness</title >

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

我认为您的选择是将XML替换为文本(如@Wololo建议的那样),或者放松您的需求。

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

票数 1
EN

Stack Overflow用户

发布于 2009-10-29 06:40:22

您可以将xml模板作为字符串读取吗?用绳子做一些类似的事情

代码语言:javascript
复制
string s = "<title>&title;</title>";
s = s.replace("&title;", "Stack Overflow Madness");
SaveXml(s);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1641944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档