2009-05-14 2 views
21

xstream에서 사용할 XML 문서 또는 노드 객체에서 InputStream 객체를 만들려면 어떻게해야합니까? 나는 ???을 대체 할 필요가있다? 몇 가지 의미있는 코드가 포함되어 있습니다. 감사. 그것을 할 수문서 또는 노드에서 InputStream을 생성하는 방법

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

답변

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

잘 작동합니다. 많은 감사드립니다. –

+0

마지막 줄에서 첫 번째 코드 줄을 사용했습니다. 그것을 확인해도 가운데 선은 아무 것도하지 않았습니다 ... – AbhishekB

+2

첫 번째 줄은 ByteArrayOUTPUTStream을 사용하고 마지막으로 ByteArrayINPUTStream을 사용했습니다. 더우기, 첫 번째 라인에서 선언 된 outputStream은 StreamResult의 매개 변수로 사용됩니다. –

5

, 당신은 코드 아래 사용 InputStream를 만들 수 있습니다 : 당신이 아파치 Xerces를 구현을 사용하는 경우

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

이 작동, 당신은 또한 설정할 수 있습니다 형식 매개 변수와 출력 형식.

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; 

}

당신이 DOM4J를 사용하는 일이 당신이 그것을 꽤 인쇄해야하는 경우!

관련 문제