2009-05-12 13 views
21

Actualmente, tengo un objeto String que contiene elementos XML:Cómo 'transformar' un objeto String (que contiene XML) a un elemento en una página JSP existente

String carsInGarage = garage.getCars(); 

ahora quiero pasar esta cadena como una fuente de entrada/secuencia (o algún tipo de fuente), pero no estoy seguro de cuál elegir y cómo implementarlo.

La mayoría de las soluciones que he examinado importan el paquete: javax.xml.transform y aceptan un archivo XML (stylerXML.xml) y la salida a un archivo HTML (outputFile.html) (Vea el código a continuación).

try 
{ 
    TransformerFactory tFactory = TransformerFactory.newInstance(); 
    Transformer transformer = tFactory.newTransformer(new StreamSource("styler.xsl")); 

    transformer.transform(new StreamSource("stylerXML.xml"), new StreamResult(new FileOutputStream("outputFile.html"))); 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
} 

Quiero aceptar un objeto String y la salida (utilizando XSL) a un elemento dentro de una página JSP existente. Simplemente no sé cómo implementar esto, incluso habiendo mirado el código anterior.

¿Puede alguien por favor asesorar/ayudar. He buscado una solución alta y baja, pero no puedo sacar nada.

Respuesta

56

Utilice un StringReader y una StringWriter:

try { 
    StringReader reader = new StringReader("<xml>blabla</xml>"); 
    StringWriter writer = new StringWriter(); 
    TransformerFactory tFactory = TransformerFactory.newInstance(); 
    Transformer transformer = tFactory.newTransformer(
      new javax.xml.transform.stream.StreamSource("styler.xsl")); 

    transformer.transform(
      new javax.xml.transform.stream.StreamSource(reader), 
      new javax.xml.transform.stream.StreamResult(writer)); 

    String result = writer.toString(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+0

Hola Bruno, Gracias por esa excelente respuesta. Está compilando correctamente ahora :) Sin embargo, todavía no puedo imprimirlo en la pantalla. Actualmente estoy intentando: out.println (writer); pero esto está fallando. – Lycana

+0

Quizás hubo un error con la transformación ... ¿cómo está fallando exactamente? –

+0

No funciona, ya que no se imprime nada en el navegador. En la parte inferior de mi bloque try tengo: String result = writer.toString(); out.print ("

" + result + "
"); También acabo de instalar una herramienta llamada Firebug para inspeccionar el contenido de mi cuerpo HTML. Nada más. – Lycana

0

Si en algún momento desea que el origen de contener algo más que una sola cadena, o si no desea generar el elemento de envoltura XML manualmente, cree un documento DOM que contiene su fuente y la pasa al transformador usando un DOMSource.

0

Esto funcionó para mí.

String str = "<my>xml</my>"  
StreamSource src = new StreamSource(new StringReader(str)); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
Result res = new StreamResult(baos); 
transformer.transform(src, res); 
Cuestiones relacionadas