xstream で使用する XML ドキュメントまたはノード オブジェクトから InputStream オブジェクトを作成するにはどうすればよいですか? ??? を置き換える必要があります。意味のあるコードで。ありがとう。
Document doc = getDocument();
InputStream is = ???;
MyObject obj = (MyObject) xstream.fromXML(is);
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());
サードパーティ ライブラリなしで Java を使用している場合は、InputStream
以下のコードを使用して作成できます。
/*
* 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());
}
それを行う 1 つの方法: DOMSourceDocument
を使用してSourceに適応させます。StreamResultを作成してByteArrayOutputStreamを適応させます。TransformerFactory.newTransformerのTransformerを使用して、データ全体をコピーします。ByteArrayInputStreamでストリームを取得します。byte[]
コードをまとめる作業は演習として残します。
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());
}
これは、apache Xerces 実装を使用している場合に機能し、出力形式で format パラメータを設定することもできます。
public static InputStream documentToPrettyInputStream(Document doc) throws IOException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
XMLWriter xmlWriter = new XMLWriter(outputStream, OutputFormat.createPrettyPrint());
xmlWriter.write(doc);
xmlWriter.close();
InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
return inputStream;
}
たまたまDOM4jを使用していて、きれいに印刷する必要がある場合!