2014-09-25 58 views
3

我是javax.xml.transform.Transformer的新用戶。Java Transformer:你如何將結果寫入OutputStream?

我在XML文件上應用XSLT,它工作正常。

我想要實現的是能夠將該變形的輸出寫入OutputStream

這是我的代碼:

OutputStream outputStream = null; 
InputStream agent = new FileInputStream("src/res/testxmlfile.xml"); 
TransformerFactory tFactory = TransformerFactory.newInstance(); 
Transformer transformer = tFactory.newTransformer(new StreamSource("src/res/trans.xslt")); 
transformer.transform(new StreamSource(agent), outputStream ????????); 

我知道它可以用來編寫這樣一個文件,但我想它寫入OutputStream對象。

transformer.transform(new StreamSource(agent), 
         new StreamResult(new FileOutputStream("/result.xml"))); 

我怎樣才能通過OutputStream在這裏使用?

這是當我傳遞的Outputstream我收到錯誤:

Exception in thread "main" javax.xml.transform.TransformerException: 
          Result object passed to ''{0}'' is invalid. 
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl 
          .getOutputHandler(TransformerImpl.java:468) 
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl 
          .transform(TransformerImpl.java:344) 
at com.gohealth.TestXmlStream.main(TestXmlStream.java:75) 

回答

3

使用StreamResult。它提供了構造寫入一個FileOutputStream

實施例使用File

transformer.transform(new StreamSource(agent), new StreamResult(file)); 

實施例使用FileOutputStream

FileOutputStream outputStream = new FileOutputStream(new File("outputfile.xml")); 
transformer.transform(new StreamSource(agent), new StreamResult(outputStream)); 

實施例使用ByteArrayOutputStream

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
transformer.transform(new StreamSource(agent), new StreamResult(outputStream)); 
byte[] bytes = outputStream.toByteArray();` 
+0

當我嘗試使用 OutputStream outputStream = null; 我收到一個異常: 線程「main」中的異常javax.xml.transform.TransformerException:傳遞給「'{0}」的結果對象''是無效的。 \t at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(TransformerImpl.java:468) \t at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl。變換(TransformerImpl.java:344) \t at com.gohealth.TestXmlStream.main(TestXmlStream.java:75) – Aniks 2014-09-25 19:43:30

+0

您需要初始化您的'outputStream'。你的情況仍然是「空」。將添加一些關於如何初始化幾個'OutputStream'的例子。 – manouti 2014-09-25 19:48:47

+0

非常感謝您的指導,上述解決方案適用於我。我是Streams的新手,我沒有與他們合作的經驗。任何建議,我應該尋找快速學習?感謝你們對我的幫助。 – Aniks 2014-09-25 21:52:34