2009-05-14 7 views
21

Làm cách nào để tạo đối tượng InputStream từ một đối tượng XML hoặc đối tượng Nút được sử dụng trong xstream? Tôi cần phải thay thế ??? với một số mã có ý nghĩa. Cảm ơn.cách tạo InputStream từ Tài liệu hoặc Nút

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

Trả lời

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

Nó hoạt động tốt, cảm ơn rất nhiều. –

+0

bạn đã sử dụng dòng mã đầu tiên ở dòng cuối cùng. các dòng giữa không làm gì nếu bạn kiểm tra nó ... – AbhishekB

+2

Dòng đầu tiên được sử dụng ByteArrayOUTPUTStream trong khi ByteArrayINPUTStream được sử dụng lần cuối. Hơn nữa, outputStream được khai báo trong dòng đầu tiên được sử dụng như một tham số cho StreamResult. –

5

Nếu bạn đang sử dụng Java mà không cần bất kỳ thư viện của bên thứ ba, bạn có thể tạo InputStream sử dụng mã dưới đây:

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

này hoạt động nếu bạn đang sử dụng thực hiện Xerces apache, bạn cũng có thể thiết lập thông số định dạng với định dạng đầu ra.

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; 

}

Nếu bạn tình cờ sử dụng DOM4j và bạn cần phải in nó khá!