我有一个XML文档。我用Java的DocumentBuilder阅读了这个文档。然后我做了一些关于DOM的更新。然后我尝试用Transformer保存这个XML表示。在最后一步,我遇到了问题。
原始XML文档包含一些unicode字符,例如
。当我尝试使用Java的Transformer保存此XML文档时,此字符在最终文件中变为简单的换行符。
在将XML保存到文件中时,如何保留这些unicode字符?
提前谢谢!
答案 0 :(得分:2)
原始XML文档包含一些unicode字符,例如
。
&#...;
语法称为数字字符引用。
未连接到Unicode(除了包括控制代码10在内的所有ASCII字符都是Unicode字符外)。
当我尝试使用Java的Transformer保存此XML文档时,此字符在最终文件中变为简单的换行符。
换行符和
字符引用表示文本内容(*)中的相同数据。当由DocumentBuilder
解析时,差异已经被丢弃,并且将用于符合XML规范的任何解析器。
通常,XML解析器不会保留infoset中不存在的输入文档中的信息,因此在不更改的情况下解析和序列化同一文档并不能保证输入和输出将是相同。差异包括属性顺序,标记内的间距,在属性值周围使用哪些引号,以及文本字符>
是否写为>
,>
,>
,{{ 1}},>
或>
,或...
好消息是几乎没有理由关心。如果要读取输出的东西也是XML解析器,它也看不到换行符和>
字符引用之间的任何差异。
(*:虽然在atttibute值内容中并不总是如此)
答案 1 :(得分:1)
你做不到。 DOM不知道哪些字符在原始源中表示为文字字符并且表示为字符引用,因此不可能“保留”它们 - 信息根本就不存在。序列化程序将对输出字符编码中无法表示的任何字符使用字符引用,但通常会尽可能使用文字字符。
唯一一次将
用于换行符的内容是属性值,其中文字换行符将在下次解析文件时标准化为空格。
答案 2 :(得分:0)
字符不仅仅是“丢失”。我假设(?)是unicode字符变形'读或写流。
确保对流使用正确的编码(InputStreamReader,OutputStreamWriter)或自己显示转换后的结果。
克