2009-05-14 15 views
21

Come posso creare un oggetto InputStream da un oggetto XML Document o Node da utilizzare in xstream? Devo sostituire il ??? con un codice significativo. Grazie.come creare un InputStream da un documento o un nodo

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

risposta

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

Funziona bene, molte grazie. –

+0

hai utilizzato la prima riga di codice nell'ultima riga. le linee di mezzo non hanno fatto nulla se si controlla ... – AbhishekB

+2

La prima riga utilizzata ByteArrayOUTPUTStream mentre l'ultimo utilizzato ByteArrayINPUTStream. Inoltre, outputStream dichiarato nella prima riga viene utilizzato come parametro per StreamResult. –

5

Se si utilizza Java senza librerie di terze parti, è possibile creare InputStream usando sottostante Codice:

/* 
* 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()); 
} 

Questo funziona se si utilizza implementazione Xerces Apache, è possibile anche impostare formattare il parametro con il formato di output.

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; 

}

Se vi capita di usare DOM4J e avete bisogno di stamparlo abbastanza!

Problemi correlati