Java XML API将"转换为&“
问题描述:
我正在开发一个Java程序,它读取HTML代码,解析HTML,获取内容(人类可读文本)并将其存储在XML文件中。有时,HTML代码包含'
,"
个字符(等等),但有时它们也分别被编写为'
和"
。Java XML API将"转换为&“
我按照适当的程序构建XML。我使用Document
和Element
类,并且使用Transformer
,DomSource
和StreamResult
类来创建XML文件。
问题是当保存文件时,我看到&
符号被替换为&
。我知道这是正确的。但它也会将'
转换为&&apos
!
我也尝试将Document
对象转换为String
对象,然后将该字符串传递给StringEscapeUtils.unescapeXml(String s)
方法,以使XML实体保持不变。但是,它不会将&
实体转换为&
,从而导致无效的XML文件。
(我已经设置了OutputKeys.ENCODING
为 “UTF-8” 和OutputKeys.METHOD
为 “XML”。)
答
问题是与你的HTML解析,而不是与你的XML输出。在HTML &;是单引号,所以当有&时,在HTML中,你的解析器应该把它作为一个单引号给你。
你在使用什么语法分析器?流行的解析器如Jsoup不会出现这种错误。
我怀疑你正在写一个字符串,其中包含六个字符'&p o s;'到DOM文档中的文本节点,以便文本节点被序列化为&a m p;一个朋友;'。文本节点应该包含未转义的文本(即单个字符'''),串行器将决定是否转义。 –