2009-10-02 54 views
14

我試圖使用FOP和Java生成PDF文檔。將字符串轉換爲java中的XML輸入流

我收到XML作爲字符串而不是文件。

如何將此XML字符串轉換爲XML輸入流,以便我可以調用xslfoTransformer.transform(source,res);其中source是我的XML字符串作爲Input流。

請提供您的建議。

回答

17

你可能想將其轉換爲Reader,而不是InputStream。使用StringReader來做到這一點。 StreamSource有一個構造函數,它需要一個Reader,並且你可以將這個StreamSource傳遞給Transformer.transform()。

我說你可能要一個Reader而非InputStream,因爲一個String持有的字符,而不是字節,並且InputStream是字節流而Reader是字符流。

+0

我試過這種方法,但我得到一個異常。 顯示java.lang.NullPointerException \t在org.apache.fop.area.AreaTreeHandler.endDocument(AreaTreeHandler.java:264) \t在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在net.sf.saxon.event.ComplexContentOutputter.close(ComplexContentOutputter.java:468) \t在 任何線索? – jobinbasani 2009-10-02 19:26:43

+0

好吧,我想通了...... 它工作時,我將xml的根元素重命名爲'根'。 感謝您的幫助! – jobinbasani 2009-10-02 19:44:29

1

使用ByteArrayInputStream

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

暗示你知道XML的編碼。這通常是不正確的。 – 2009-10-02 17:01:35

29
new StreamSource(new StringReader(str))