web-dev-qa-db-fra.com

Comment "transformer" un objet String (contenant XML) en un élément d'une page JSP existante

Actuellement, j'ai un objet String qui contient des éléments XML:

String carsInGarage = garage.getCars();

Je souhaite maintenant passer cette chaîne en tant que source d'entrée/flux (ou une sorte de source), mais je ne sais pas laquelle choisir ni comment la mettre en œuvre.

La plupart des solutions que j'ai examinées importent le package: javax.xml.transform et acceptent un fichier XML (stylerXML.xml) et sont exportées dans un fichier HTML (outputFile.html) (voir le code ci-dessous).

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

Je souhaite accepter un objet String et une sortie (à l'aide de XSL) sur un élément d'une page JSP existante. Je ne sais tout simplement pas comment implémenter cela, même après avoir examiné le code ci-dessus.

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

22
Lycana

Utilisez a StringReader et a 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();
}
56
bruno conde

Si, à un moment donné, vous souhaitez que la source contienne plus d'une chaîne ou si vous ne souhaitez pas générer l'élément d'encapsuleur XML manuellement, créez un document DOM contenant votre source et transmettez-le au transformateur à l'aide de DOMSource. .

0
jelovirt

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);
0
Teejay