2010-05-23 28 views

回答

7

這是默認PrettyPrintWriter的結果。我個人喜歡逃避<和>。它使輸出看起來更加平衡。

如果你想要規範化的XML輸出,你應該使用Java提供的C14N API。

如果流式傳輸的內容包含XML,則CDATA是更好的選擇。這裏是我做到了,

XStream xstream = new XStream(
      new DomDriver() { 
       public HierarchicalStreamWriter createWriter(Writer out) { 
        return new MyWriter(out);}}); 
String xml = xstream.toXML(myObj); 

    ...... 

public class MyWriter extends PrettyPrintWriter { 
    public MyWriter(Writer writer) { 
     super(writer); 
    } 

    protected void writeText(QuickWriter writer, String text) { 
     if (text.indexOf('<') < 0) { 
      writer.write(text); 
     } 
     else { 
      writer.write("<[CDATA["); writer.write(text); writer.write("]]>"); 
     } 
    } 
} 
+0

CDATA節並不是一個完整的替代方案,因爲序列']]>'不能進入它。 (它有時會被轉換爲兩個CDATA部分。) – bobince 2010-05-24 16:24:34

+0

請注意,此行爲會關閉您的XStream對象的全局轉義。如果您只想在文本包含'<'或其他特定字符時禁用轉義,則可以用'super.write(writer,text);'替換'writer.write(text);',從而恢復默認的轉義行爲對於所有其他情況。 – 2015-03-19 13:52:51

0

XStream不自己寫XML,它使用各種庫(「驅動程序」?)來這樣做。

只要選擇一個沒有。該列表在他們的網站上。我想它會默認使用XOM。

1

C數據不爲我工作, 最後我有阿帕奇StringUtils的工作。

StringUtils.replaceEach(xml, new String[]{"&lt;","&quot;","&apos;","&gt;"}, new String[]{"<","\"","'",">"});