2009-05-14 19 views
21

xstreamで使用するXMLドキュメントまたはNodeオブジェクトからInputStreamオブジェクトを作成するにはどうすればよいですか?私は???を交換する必要があります意味のあるコードでありがとう。それを行うにはドキュメントまたはノードからInputStreamを作成する方法

Document doc = getDocument(); 
InputStream is = ???; 
MyObject obj = (MyObject) xstream.fromXML(is); 

答えて

40
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
Source xmlSource = new DOMSource(doc); 
Result outputTarget = new StreamResult(outputStream); 
TransformerFactory.newInstance().newTransformer().transform(xmlSource, outputTarget); 
InputStream is = new ByteArrayInputStream(outputStream.toByteArray()); 
+1

これはうまくいく、多くのおかげです。 –

+0

最後の行で1行目のコードを使用しました。それをチェックすると中間行は何もしませんでした。 – AbhishekB

+2

最初の行はByteArrayOUTPUTStreamを使用し、最後はByteArrayINPUTStreamを使用していました。さらに、最初の行で宣言されたoutputStreamは、StreamResultのパラメータとして使用されます。 –

2

一つの方法:DOMSourceSourceからDocumentを調整します。 StreamResultを作成してByteArrayOutputStreamに適合させます。データをコピーするにはTransformerFactory.newTransformerTransformerを使用します。 byte[]とストリームをByteArrayInputStreamで取得してください。

コードをまとめて演習として残します。あなたが任意のサードパーティのライブラリなしでJavaを使用している場合は

5

、あなたはコードの下に使用してInputStreamを作成することができます:あなたは、Apache Xercesの実装を使用している場合

/* 
* Convert a w3c dom node to a InputStream 
*/ 
private InputStream nodeToInputStream(Node node) throws TransformerException { 
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
    Result outputTarget = new StreamResult(outputStream); 
    Transformer t = TransformerFactory.newInstance().newTransformer(); 
    t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); 
    t.transform(new DOMSource(node), outputTarget); 
    return new ByteArrayInputStream(outputStream.toByteArray()); 
} 
2
public static InputStream document2InputStream(Document document) throws IOException { 
     ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
     OutputFormat outputFormat = new OutputFormat(document); 
     XMLSerializer serializer = new XMLSerializer(outputStream, outputFormat); 
     serializer.serialize(document); 
     return new ByteArrayInputStream(outputStream.toByteArray()); 
} 

これは動作しますが、あなたも設定することができますformatを出力形式で指定します。

1
public static InputStream documentToPrettyInputStream(Document document) throws IOException{ 

    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
    XMLWriter xmlWriter = new XMLWriter(outputStream, OutputFormat.createPrettyPrint()); 
    xmlWriter.write(document); 
    xmlWriter.close(); 
    InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); 

    return inputStream; 

}

あなたはDOM4Jを使用するために起こると、あなたはかなりそれを印刷する必要がある場合は!

関連する問題