如何从文档或节点创建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,你需要打印漂亮!