सबसे पहले javax.xml.transform.stream.StreamSource
पर डाउनकास्ट करने का प्रयास करें। यदि यह सफल होता है तो आपको गेटर्स के माध्यम से अंतर्निहित InputStream
या Reader
तक पहुंच प्राप्त होती है। यह सबसे आसान तरीका होगा।
यदि डाउनकास्टिंग विफल रहता है, तो आप javax.xml.transform.Transformer
का उपयोग javax.xml.transform.stream.StreamResult
में बदलने के लिए कर सकते हैं जो java.io.ByteArrayOutputStream
के साथ स्थापित किया गया है। फिर आप java.io.ByteArrayInputStream
लौटाते हैं। की तरह कुछ:
Transformer t = // getTransformer();
ByteArrayOutputStream os = new ByteArrayOutputStream();
Result result = new StreamResult(os);
t.transform(inputSource, result);
return new ByteArrayInputStream(os.getByteArray());
बेशक, StreamSource
एक बड़े दस्तावेज़ हो सकता है, यह सलाह दी जाती है। उस स्थिति में, आप एक अस्थायी फ़ाइल और java.io.FileOutputStream
/java.io.FileInputStram
का उपयोग कर सकते हैं। एक और विकल्प एक ट्रांसफार्मर थ्रेड को बढ़ावा देना और java.io.PipedOutputStream
/java.io.PipedInputStream
के माध्यम से संवाद करना होगा, लेकिन यह अधिक जटिल है:
PipedInputStream is = new PipedInputStream();
PipedOutputStream os = new PipedOutputStream(is);
Result result = new StreamResult(os);
// This creates and starts a thread that creates a transformer
// and applies it to the method parameters.
spawnTransformerThread(inputSource, result);
return is;