2009-05-14 11 views
21

¿Cómo puedo crear un objeto InputStream a partir de un documento XML o un objeto Node para ser utilizado en xstream? Necesito reemplazar el ??? con algún código significativo. Gracias.cómo crear un InputStream desde un documento o nodo

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

Respuesta

40
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()); 
+1

Funciona bien, muchas gracias. –

+0

usaste la 1ra línea de código en la última línea. las líneas intermedias no hicieron nada si lo compruebas ... – AbhishekB

+2

La primera línea usó ByteArrayOUTPUTStream mientras que la última ByteArrayINPUTStream usada. Además, outputStream declarado en la primera línea se usa como parámetro para StreamResult. –

5

Si está utilizando Java sin ningún tipo de bibliotecas de terceros, puede crear InputStream mediante 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()); 
} 
2
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 aplicación Apache Xerces, también puede establecer parámetro de formato con el formato de salida.

1
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 usted usa DOM4J y necesita imprimir bastante!

Cuestiones relacionadas