2010-05-23 7 views

Respuesta

7

Este es el resultado del PrettyPrintWriter predeterminado. Personalmente, me gusta escapar < y>. Hace que la salida se vea más equilibrada.

Si desea una salida XML canonicalizada, debe usar la API C14N proporcionada en Java.

Si el contenido de transmisión incluye XML, CDATA es una mejor opción. Aquí es cómo lo hice,

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

Una sección CDATA no es una alternativa completa para escapar, ya que la secuencia ']]>' no puede entrar. (A veces se escapó en dos secciones de CDATA). – bobince

+0

Tenga en cuenta que este comportamiento se desactiva escapando globalmente para su objeto XStream. Si solo desea desactivar el escape cuando el texto contiene '<' u otros caracteres específicos, puede reemplazar 'writer.write (text);' con 'super.write (writer, text);', restaurando así el comportamiento de escape predeterminado para todos los demás casos. –

0

XStream no escribe XML en sí mismo, sino que usa varias bibliotecas ("controladores"?) Para hacerlo.

Simplemente elija uno que no lo haga. La lista está en su sitio. Supongo que usaría XOM por defecto.

1

CDATA no funcionó para mí, Por último tengo que trabajar con Apache StringUtils.

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