2009-05-12 10 views
21

Attualmente, ho un oggetto String che contiene elementi XML:Come 'trasformare' un oggetto String (contenente XML) ad un elemento in una pagina JSP esistente

String carsInGarage = garage.getCars(); 

Ora voglio passare questa stringa come una sorgente di input/stream (o qualche tipo di sorgente), ma non sono sicuro quale scegliere e come implementarlo.

La maggior parte delle soluzioni che ho esaminato importano il pacchetto: javax.xml.transform e accetta un file XML (stylerXML.xml) e l'output in un file HTML (outputFile.html) (vedi il codice di seguito).

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(); 
} 

Desidero accettare un oggetto String e generare (utilizzando XSL) un elemento all'interno di una pagina JSP esistente. Non so come implementarlo, anche se ho visto il codice sopra.

Qualcuno può consigliare/assistere. Ho cercato in alto e in basso per una soluzione, ma non riesco a estrarre nulla.

risposta

56

Utilizzare un StringReader e un 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

Ciao Bruno, Grazie per l'eccellente risposta. Ora si sta compilando correttamente :) Tuttavia, non riesco ancora a stamparlo sullo schermo. Attualmente sto provando: out.println (scrittore); ma questo non funziona. – Lycana

+0

Forse c'è stato un errore con la trasformazione ... esattamente come sta fallendo? –

+0

Fallisce perché non viene stampato nulla nel browser. Nella parte inferiore del mio blocco try ho: String result = writer.toString(); out.print ("

" + result + "
"); Ho anche appena installato uno strumento chiamato Firebug per ispezionare il contenuto del mio corpo HTML. Ancora niente. – Lycana

0

Se ad un certo punto si desidera che la fonte di contenere più di una singola stringa, o non si desidera generare il wrapper XML elemento manualmente, creare un documento DOM che contiene la tua fonte e passalo al trasformatore usando un DOMSource.

0

Questo ha funzionato per me.

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); 
Problemi correlati