2009-05-12 6 views
21

Actuellement, j'ai un objet String qui contient des éléments XML:Comment « transformer » un objet String (XML contenant) à un élément sur une page JSP existante

String carsInGarage = garage.getCars(); 

Je veux maintenant transmettre cette chaîne comme une source d'entrée/de flux (ou un type de source), mais je ne sais pas lequel choisir et comment l'implémenter.

La plupart des solutions que j'ai examinées importent le paquet: javax.xml.transform et acceptent un fichier XML (stylerXML.xml) et sortent dans un fichier HTML (outputFile.html) (Voir le code ci-dessous). Je souhaite accepter un objet String et le sortir (en utilisant XSL) vers un élément d'une page JSP existante. Je ne sais pas comment l'implémenter, même après avoir regardé le code ci-dessus.

Quelqu'un peut-il s'il vous plaît conseiller/aider. J'ai cherché haut et bas pour trouver une solution, mais je ne peux rien retirer.

Répondre

56

Utilisez un StringReader et 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

Bonjour Bruno, Merci pour cette excellente réponse. Il compile correctement maintenant :) Cependant, je suis toujours incapable de l'imprimer à l'écran. J'essaie actuellement: out.println (writer); mais cela échoue. – Lycana

+0

Peut-être qu'il y avait une erreur avec la transformation ... comment est-ce qu'il échoue exactement? –

+0

Echec car rien n'est imprimé dans le navigateur. Au bas de mon bloc try, j'ai: String resultat = writer.toString(); out.print ("

" + result + "
"); Je viens également d'installer un outil appelé Firebug pour inspecter le contenu de mon corps HTML. Rien de nouveau. – Lycana

0

Si à un moment donné, vous voulez que la source contient plus qu'une seule chaîne, ou que vous ne souhaitez pas générer l'élément d'emballage XML manuellement, créez un document DOM qui contient votre source et le transmet au transformateur en utilisant un DOMSource.

0

Cela a fonctionné pour moi.

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); 
Questions connexes