2009-10-02 8 views
14

J'essaie de générer un document PDF en utilisant FOP et Java.Convertir une chaîne en flux d'entrée XML en Java

Je reçois le code XML en tant que chaîne et non en tant que fichier.

Comment puis-je convertir cette chaîne XML en un flux d'entrée XML afin que je puisse appeler xslfoTransformer.transform (source, res); où source est ma chaîne XML en tant que flux d'entrée.

S'il vous plaît fournir vos suggestions.

Répondre

17

Vous voulez probablement le convertir en un Reader, pas InputStream. Utilisez StringReader pour ce faire. StreamSource a un constructeur qui prend un lecteur, et vous pouvez passer que StreamSource à Transformer.transform().

Je dis que vous voulez probablement Reader plutôt que d'un InputStream parce qu'une chaîne contient des caractères, non octets, et un InputStream est un flux d'octets alors qu'un Reader est un flux de caractères.

+0

J'ai essayé cette méthode mais je reçois une exception. java.lang.NullPointerException \t à org.apache.fop.area.AreaTreeHandler.endDocument (AreaTreeHandler.java:264) \t à org.apache.fop.fo.FOTreeBuilder.endDocument (FOTreeBuilder.java:171) \t à net.sf.saxon.event.ContentHandlerProxy.close (ContentHandlerProxy.java:255) \t à net.sf.saxon.event.ImplicitResultChecker.close (ImplicitResultChecker.java:69) \t à net.sf.saxon.event .ProxyReceiver.close (ProxyReceiver.java:87) \t à net.sf.saxon.event.ComplexContentOutputter.close (ComplexContentOutputter.java:468) \t à Des indices? – jobinbasani

+0

Ok..I figured it out ... Il a travaillé quand je renomme l'élément racine du fichier XML à 'root'. Merci pour l'aide !!!! – jobinbasani

1

Utilisation ByteArrayInputStream:

String S = ...; 
InputStream source = new ByteArrayInputStream(S.getBytes(encoding)) 
+1

vous Implique connaissez l'encodage du XML. Ce qui n'est normalement pas vrai. –

29
new StreamSource(new StringReader(str)) 
Questions connexes