нет способа напрямую написать отформатированный XML с помощью javax.xml.stream.XMLStreamWriter (Java SE 6) ??? Это действительно невероятно, поскольку другие XML-API, такие как JAXB и некоторые библиотеки DOM, могут это сделать. Даже эквивалент .NET XMLStreamWriter способен на этот AFAIK (если я правильно помню, это класс System.Xml.XmlTextWriter).XMLStreamWriter: отступ
Это означает, что единственный вариант, который у меня есть, - это переработать 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 только для красивой печати?
Я не могу найти такой метод writeText?!? http://download.oracle.com/javase/6/docs/api/javax/xml/stream/XMLStreamWriter.html – Puce
Хм, может быть, с writeCharacters, но я думал, что это просто для содержимого элемента ... – Puce
Вы правы, это должны были быть записи символов. Этот метод можно использовать для вставки текста в любом месте документа не только в пределах одного элемента. –