真的沒有辦法直接寫使用javax.xml.stream.XMLStreamWriter(Java SE 6中)格式的XML ???這實在令人難以置信,因爲其他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 2011-01-06 16:38:10
嗯,也許與writeCharacters,但我認爲這只是爲了元素內容... – Puce 2011-01-06 16:39:36
你是對的,它應該是writeCharacters。此方法可用於在文檔中的任何位置插入文本,而不只是在單個元素中插入文本。 – 2011-01-06 16:42:45