2009-10-02 16 views
14

Próbuję wygenerować dokument PDF za pomocą FOP i Java.Konwertuj ciąg znaków na strumień wejściowy XML w java

Otrzymuję XML jako ciąg, a nie jako plik.

Jak przekonwertować ten ciąg XML na strumień wejściowy XML, aby można było wywołać xslfoTransformer.transform (źródło, res); gdzie źródłem jest mój ciąg XML jako strumień wejściowy.

Proszę podać swoje sugestie.

Odpowiedz

17

Prawdopodobnie chcesz przekonwertować go na Reader, a nie InputStream. W tym celu użyj StringReader. StreamSource ma konstruktora, który pobiera Reader i możesz przekazać tę StreamSource do Transformer.transform().

mówię prawdopodobnie chcą Reader raczej niż InputStream ponieważ String posiada znaków, a nie bajtów i InputStream jest strumień bajtów, podczas gdy Reader jest ciągiem znaków.

+0

Próbowałem tej metody, ale otrzymuję wyjątek. java.lang.NullPointerException \t w org.apache.fop.area.AreaTreeHandler.endDocument (AreaTreeHandler.java:264) \t w org.apache.fop.fo.FOTreeBuilder.endDocument (FOTreeBuilder.java:171) \t at net.sf.saxon.event.ContentHandlerProxy.close (ContentHandlerProxy.java:255) \t at net.sf.saxon.event.ImplicitResultChecker.close (ImplicitResultChecker.java:69) \t at net.sf.saxon.event .ProxyReceiver.close (ProxyReceiver.java:87) \t w net.sf.saxon.event.ComplexContentOutputter.close (ComplexContentOutputter.java:468) \t w Jakieś wskazówki? – jobinbasani

+0

Ok..I wymyśliłem to ... Zadziałało, kiedy zmieniłem nazwę elementu głównego xml na "root". Dzięki za pomoc !!!! – jobinbasani

1

Zastosowanie ByteArrayInputStream:

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

Sugeruje, że znasz kodowanie XML. Co zwykle nie jest prawdą. –

29
new StreamSource(new StringReader(str))