如何从文档或节点创建InputStream

如何从要在xstream中使用的XML Document或Node对象创建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()); } 

一种方法:使用DOMSource调整Document到源 。 创建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 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,你需要打印漂亮!