действительно ли нет способа напрямую писать отформатированный XML с использованием javax.xml.stream.XMLStreamWriter (Java SE 6) ??? Это действительно невероятно, так как другие API XML, такие как JAXB и некоторые библиотеки DOM, могут это сделать. Даже .NET XMLStreamWriter эквивалентен этому AFAIK (если я правильно помню, класс System.Xml.XmlTextWriter).
Это означает, что единственный вариант, который у меня есть, - это повторный анализ XML для генерации форматированного вывода ??
например:.
StringWriter sw = new StringWriter();
XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newFactory();
XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(sw);
writeXml(xmlStreamWriter);
xmlStreamWriter.flush();
xmlStreamWriter.close();
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
StringWriter formattedStringWriter = new StringWriter();
transformer.transform(new StreamSource(new StringReader(sw.toString())), new StreamResult(formattedStringWriter));
System.out.println(formattedStringWriter);
Проблема с этим решением заключается в свойстве "{http://xml.apache.org/xslt}indent-amount". Я не нашел никакой документации по нему, и, похоже, он не является переносимым.
Итак, какие еще варианты у меня есть, если я хочу сделать это со стандартными классами Java 6? Создать граф объектов JAXB или DOM только для красивой печати ??