Как создать InputStream из документа или Node
Как создать объект InputStream из XML-документа или объекта Node, который будет использоваться в xstream? Мне нужно заменить??? с некоторым значимым кодом. Спасибо.
Document doc = getDocument();
InputStream is = ???;
MyObject obj = (MyObject) xstream.fromXML(is);
Ответы
Ответ 1
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());
Ответ 2
Если вы используете Java без каких-либо сторонних библиотек, вы можете создать InputStream
с помощью кода ниже:
/*
* 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());
}
Ответ 3
Один из способов сделать это: адаптируйте Document
к Source с помощью DOMSource. Создайте StreamResult, чтобы адаптировать ByteArrayOutputStream. Используйте Transformer из TransformerFactory.newTransformer в скопируйте данные. Получите byte[]
и поток ByteArrayInputStream.
Ввод кода вместе остается в виде упражнения.
Ответ 4
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());
}
Это работает, если вы используете реализацию apache Xerces, вы также можете установить параметр формата в формате вывода.
Ответ 5
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, и вам нужно распечатать его довольно!