В этой статье мы познакомимся с простым способом преобразования строки в объект XML Document и обратной конвертации XML Document в строку. А также разберем зачем это нужно.
Из String в XML Document и наоборот
Программируя на Java часто приходится иметь дело со строками, которые содержат в себе XML разметку. Такие объекты нужно как-то обрабатывать. Для этого нам нужно преобразовать (конвертировать) такую строку c XML в объект Document (org.w3c.dom.Document
). Похожая задача конвертации стоит во время отладки, когда нам потребуется преобразовать XML Document в объект String.
В этой статье мы разбирались как сделать красивый и читабельный вывод неотформатированной строки с XML разметкой. В этой статье нас больше интересует правильный способ преобразования между String и объектом Document.
Конвертация в String из XML Document и наоборот на примере
Напишем 2 метода для конвертации и обратного преобразования XML и String:
- Метод
stringToDocument(String xmlString)
принимает на вход строку из XML разметкой, а затем парсит ее и возвращает в виде Document DOM. Мы будем использоватьInputSource
иStringReader
для этого. - Метод
documentToString(Document document)
принимает на вход Document и преобразовывает его в объект String. Для этого используются классыTransformer
,StringWriter
иStreamResult
пакетаjavax.xml.transform
.
Напишем класс DocumentToStringConverter и реализуем этим методы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
package ua.com.prologistic; import org.w3c.dom.Document; import org.xml.sax.InputSource; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.StringReader; import java.io.StringWriter; public class DocumentToStringConverter { public static void main(String[] args) { // какая-то строка с XML содержимым String xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + "\n<Developer id=\"1\">\n" + "<name>Andrew</name><age>25</age><position>Middle</position>" + "<language>Java</language></Developer>"; // убираем переносы строк входной строки для компактного вывода xmlString = xmlString.replaceAll("\n|\r", ""); Document doc = stringToDocument(xmlString); String str = documentToString(doc); System.out.println(str); } // конвертируем XML Document в строку private static String documentToString(Document doc) { TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transfObject; try { transfObject = tFactory.newTransformer(); // здесь мы указываем, что хотим убрать XML declaration: // тег <?xml ... ?> и его содержимое transfObject.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); StringWriter writer = new StringWriter(); transfObject.transform(new DOMSource(doc), new StreamResult(writer)); // возвращаем преобразованный в строку XML Document return writer.getBuffer().toString(); } catch (TransformerException e) { e.printStackTrace(); } return null; } // парсим строку в XML Document private static Document stringToDocument(String xmlStr) { DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder; try { docBuilder = builderFactory.newDocumentBuilder(); // парсим переданную на вход строку с XML разметкой return docBuilder.parse(new InputSource(new StringReader(xmlStr))); } catch (Exception e) { e.printStackTrace(); } return null; } } |
Теперь запустим нашу программу и посмотрим в консоль:
1 |
<Developer id="1"><name>Andrew</name><age>25</age><position>Middle</position><language>Java</language></Developer> |
Как видите, входная строка была распознана правильно, преобразована в XML Document и затем обратно конвертирована в объект String.
Читайте больше полезных статей по обработке XML в Java.
А также подписывайтесь на новые статьи!