我已经看到了[这里](Formatting XML file using StAX)和[这里](merge XML using STAX XMLStreamWriter)
提供的答案在这两种情况下它都不起作用。在这两种情况下都是因为我的IDE(netbeans)无法将这些方法识别为有效。这真让我抓狂。在此先感谢您的帮助。
这是不起作用的代码,我只是试图将我的编写器包装在IndentingWriter中。
XMLOutputFactory outputFactory = XMLOutputFactory.newFactory();
XMLEventWriter writer = null;
try {
writer = outputFactory
.createXMLEventWriter(new FileOutputStream(args[1]), "UTF-8");
writer = new IndentingXMLEventWriter(writer);
} catch (XMLStreamException ex) {
Logger.getLogger(XMLReader.class.getName()).log(Level.SEVERE, null, ex);
}
以下是我的导入列表:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.StringTokenizer;
import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.Characters;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartDocument;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
答案 0 :(得分:0)
XMLOutputFactory.createXMLEventWriter具有另一个签名,在该签名中接受Writer而不是OutputStream。如果使用该方法,则可以使用append方法在所需的任意位置添加换行符(此处显示为StringWriter,但也适用于其他类型的Writer)
StringWriter outputXml = new StringWriter();
XMLEventWriter eventWriter = factory.createXMLEventWriter(outputXml);
XMLEvent event = eventFactory.createStartDocument();
eventWriter.add(event);
eventWriter.flush(); // important!
outputXml.append("\n"); // add newline after XML declaration
您甚至可以在XML元素内输出内容,而不仅仅是在元素之间。如果您需要发出一些旧的或非标准的XML格式,这会很方便。