2017-08-30 85 views
0

我正在开发一个Java程序,它读取HTML代码,解析HTML,获取内容(人类可读文本)并将其存储在XML文件中。有时,HTML代码包含',"个字符(等等),但有时它们也分别被编写为'"Java XML API将"转换为&“

我按照适当的程序构建XML。我使用DocumentElement类,并且使用Transformer,DomSourceStreamResult类来创建XML文件。

问题是当保存文件时,我看到&符号被替换为&。我知道这是正确的。但它也会将'转换为&&apos

我也尝试将Document对象转换为String对象,然后将该字符串传递给StringEscapeUtils.unescapeXml(String s)方法,以使XML实体保持不变。但是,它不会将&实体转换为&,从而导致无效的XML文件。

(我已经设置了OutputKeys.ENCODING为 “UTF-8” 和OutputKeys.METHOD为 “XML”。)

+1

我怀疑你正在写一个字符串,其中包含六个字符'&p o s;'到DOM文档中的文本节点,以便文本节点被序列化为&a m p;一个朋友;'。文本节点应该包含未转义的文本(即单个字符'''),串行器将决定是否转义。 –

回答

1

问题是与你的HTML解析,而不是与你的XML输出。在HTML &;是单引号,所以当有&时,在HTML中,你的解析器应该把它作为一个单引号给你。

你在使用什么语法分析器?流行的解析器如Jsoup不会出现这种错误。

+0

这不是问题。我不介意我是否有'''或'''。我认为问题在于当XML解析器看到'&'符号而没有注意到后面跟有“或”等,因此将其转换为“&”,因此具有“&”。但是,如果文本是“George&Nick”,那么'&'应该转换为'&'。 – George

+1

是的,这是问题,没有XML序列化程序不会犯这个错误。我不知道为什么你认为尽管被指出,但这是一个不正确的想法。 – kumesana