31

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

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

5 に答える 5

58
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());
于 2009-05-14T18:59:35.633 に答える
9

サードパーティ ライブラリなしで 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());
}
于 2009-08-18T08:05:03.883 に答える
3

それを行う 1 つの方法: DOMSourceDocumentを使用してSourceに適応させます。StreamResultを作成してByteArrayOutputStreamを適応させます。TransformerFactory.newTransformerのTransformerを使用して、データ全体をコピーします。ByteArrayInputStreamでストリームを取得します。byte[]

コードをまとめる作業は演習として残します。

于 2009-05-14T18:55:02.633 に答える
3
 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 パラメータを設定することもできます。

于 2012-12-07T13:46:21.353 に答える
2
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を使用していて、きれいに印刷する必要がある場合!

于 2014-08-26T08:48:44.740 に答える