如何将新行添加到由XMLEventWriter编写的XML文件中

时间:2014-07-21 18:14:08

标签: java xml xml-parsing stax

我已经看到了[这里](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;

1 个答案:

答案 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格式,这会很方便。