xstreamで使用するXMLドキュメントまたはNodeオブジェクトからInputStreamオブジェクトを作成するにはどうすればよいですか?私は???を交換する必要があります意味のあるコードでありがとう。それを行うにはドキュメントまたはノードからInputStreamを作成する方法
Document doc = getDocument();
InputStream is = ???;
MyObject obj = (MyObject) xstream.fromXML(is);
xstreamで使用するXMLドキュメントまたはNodeオブジェクトからInputStreamオブジェクトを作成するにはどうすればよいですか?私は???を交換する必要があります意味のあるコードでありがとう。それを行うにはドキュメントまたはノードから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());
一つの方法:DOMSourceでSourceからDocument
を調整します。 StreamResultを作成してByteArrayOutputStreamに適合させます。データをコピーするにはTransformerFactory.newTransformerのTransformerを使用します。 byte[]
とストリームをByteArrayInputStreamで取得してください。
コードをまとめて演習として残します。あなたが任意のサードパーティのライブラリなしでJavaを使用している場合は
、あなたはコードの下に使用して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());
}
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を出力形式で指定します。
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を使用するために起こると、あなたはかなりそれを印刷する必要がある場合は!
これはうまくいく、多くのおかげです。 –
最後の行で1行目のコードを使用しました。それをチェックすると中間行は何もしませんでした。 – AbhishekB
最初の行はByteArrayOUTPUTStreamを使用し、最後はByteArrayINPUTStreamを使用していました。さらに、最初の行で宣言されたoutputStreamは、StreamResultのパラメータとして使用されます。 –