java - convertir - cómo crear un InputStream desde un documento o nodo
java fileinputstream from file (5)
Si está utilizando Java sin bibliotecas de terceros, puede crear InputStream
utilizando el siguiente código:
/*
* 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());
}
¿Cómo puedo crear un objeto InputStream a partir de un documento XML o un objeto Nodo para usar en xstream? Necesito reemplazar el ??? con algún código significativo. Gracias.
Document doc = getDocument();
InputStream is = ???;
MyObject obj = (MyObject) xstream.fromXML(is);
Una forma de hacerlo: Adapte el Document
a una Source con DOMSource . Cree un StreamResult para adaptar un ByteArrayOutputStream . Utilice un Transformer de TransformerFactory.newTransformer para copiar a través de los datos. Recupere su byte[]
y ByteArrayInputStream con ByteArrayInputStream .
Poner el código junto se deja como un ejercicio.
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;
}
¡Si por casualidad usas DOM4j y necesitas imprimirlo bastante!
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());
}
Esto funciona si está utilizando la implementación de Xerces de apache, también puede establecer el parámetro de formato con el formato de salida.
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());