Java Convert XML to String – Запись XML Dom в файл

Примеры Java для чтения XML-файла и вывода XML-строки на консоль или записи XML в файл.

1. Преобразование XML в строку

Чтобы преобразовать объект XML, например org.w3c.dom.Document, в строку, вам понадобятся следующие классы:

  • javax.xml.transform.Transformer : Экземпляр этого класса может преобразовать исходное дерево в результирующее дерево, используя свой метод transform().
  • javax.xml.transform.TransformerFactory : Фабрика для создания экземпляра Transformer.
  • javax.xml.transform.dom.DOMSource : Исходное дерево в форме дерева объектной модели документа(DOM).
  • javax.xml.transform.stream.StreamResult : хранилище для дерева результатов преобразования, которое может быть XML, обычным текстом, HTML или какой-либо другой формой разметки.

Для демонстрационных целей мы расширяем пример чтения XML-строки до XML Dom. На высоком уровне мы используем Transformer.transform(source, target) для преобразования.

  • Для записи в строку используйте экземпляр StringWriter.
  • Для записи в файл используйте экземпляр FileOutpurStream.
transformer.transform(new DOMSource(xmlDocument), new StreamResult(writer));

2. Преобразование XML в строку

В следующем примере мы преобразуем входной объект Document в строку. Затем мы можем использовать эту строку для печати в консоли или файлах журнала.

public static String convertXmlDomToString(Document xmlDocument) {TransformerFactory tf = TransformerFactory.newInstance();Transformer transformer;try {transformer = tf.newTransformer();// Uncomment if you do not require XML declaration// transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");//A character stream that collects its output in a string buffer,//which can then be used to construct a string.StringWriter writer = new StringWriter();//transform document to stringtransformer.transform(new DOMSource(xmlDocument), new StreamResult(writer));return writer.getBuffer().toString();} catch(TransformerException e) {e.printStackTrace();} catch(Exception e) {e.printStackTrace();}return null;}

3. Запись XML в файл

В следующем примере мы используем FileOutputStream для записи проанализированного XML-содержимого в указанный файл.

private static void writeXmlDocumentToFile(Document xmlDocument, String fileName) {TransformerFactory tf = TransformerFactory.newInstance();Transformer transformer;try {transformer = tf.newTransformer();//Uncomment if you do not require XML declaration//transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");//Write XML to fileFileOutputStream outStream = new FileOutputStream(new File(fileName));transformer.transform(new DOMSource(xmlDocument), new StreamResult(outStream));} catch(TransformerException e) {e.printStackTrace();} catch(Exception e) {e.printStackTrace();}}

3. Полный пример

Полный код, используемый для запуска примера.

public class ConvertStringToXML {public static void main(String[] args) {final String xmlStr = "<employees>" +" <employee id=\"101\">" +" <name>Lokesh Gupta</name>" +" <title>Author</title>" +" </employee>" +" <employee id=\"102\">" +" <name>Brian Lara</name>" +" <title>Cricketer</title>" +" </employee>" +"</employees>";//Use method to convert XML string content to XML Document objectDocument doc = convertStringToXMLDocument(xmlStr);//Convert XML to StringString outputXML = convertXmlDomToString(doc);System.out.println("Output string : " + outputXML);//Write XML to FilewriteXmlDocumentToFile(doc, "c:/temp/test.xml");}private static Document convertStringToXMLDocument(String xmlString) {//Parser that produces DOM object trees from XML contentDocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//API to obtain DOM Document instanceDocumentBuilder builder = null;try {//Create DocumentBuilder with default configurationbuilder = factory.newDocumentBuilder();//Parse the content to Document objectDocument doc = builder.parse(new InputSource(new StringReader(xmlString)));return doc;} catch(Exception e) {e.printStackTrace();}return null;}public static String convertXmlDomToString(Document xmlDocument) {TransformerFactory tf = TransformerFactory.newInstance();Transformer transformer;try {transformer = tf.newTransformer();// Uncomment if you do not require XML declaration// transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");//A character stream that collects its output in a string buffer,//which can then be used to construct a string.StringWriter writer = new StringWriter();//transform document to stringtransformer.transform(new DOMSource(xmlDocument), new StreamResult(writer));return writer.getBuffer().toString();} catch(TransformerException e) {e.printStackTrace();} catch(Exception e) {e.printStackTrace();}return null;}private static void writeXmlDocumentToFile(Document xmlDocument, String fileName) {TransformerFactory tf = TransformerFactory.newInstance();Transformer transformer;try {transformer = tf.newTransformer();//Uncomment if you do not require XML declaration//transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");//Write XML to fileFileOutputStream outStream = new FileOutputStream(new File(fileName));transformer.transform(new DOMSource(xmlDocument), new StreamResult(outStream));} catch(TransformerException e) {e.printStackTrace();} catch(Exception e) {e.printStackTrace();}}}

Пишите мне свои вопросы в комментариях.

Прокрутить вверх