При работе с XML в Java, часто требуется выводить XML данные в отформатированном виде для удобства чтения и анализа. К примеру, у вас есть строка XML без отступов и переносов строк.
String unformattedXml = "<tag><nested>hello</nested></tag>";
И ваша задача — преобразовать эту строку в отформатированный XML. В этом случае, вы можете воспользоваться таким подходом:
import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.xml.sax.InputSource; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.StringReader; import java.io.StringWriter; public String format(String unformattedXml) { try { DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); Document document = documentBuilder.parse(new InputSource(new StringReader(unformattedXml))); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); DOMSource source = new DOMSource(document); StringWriter stringWriter = new StringWriter(); StreamResult result = new StreamResult(stringWriter); transformer.transform(source, result); return stringWriter.toString(); } catch (Exception e) { throw new RuntimeException(e); } }
В этом коде используется DocumentBuilder и Transformer из стандартной библиотеки Java для преобразования неотформатированной строки XML в отформатированную. С помощью свойства INDENT устанавливаем необходимость отступов, а с помощью свойства indent-amount задаем размер отступа.
Таким образом, вы получаете строку с красиво отформатированным XML.
Добавить комментарий