【问题标题】:Appending data to an XML file using OutputStreamWriter (StAX parser)使用 OutputStreamWriter(StAX 解析器)将数据附加到 XML 文件
【发布时间】:2016-03-01 06:19:10
【问题描述】:

我想使用 OutputStreamWriter 将数据附加到 XML 文件,但结果如下所示

<?xml version="1.0" encoding="utf-8"?>
<doc>
 <msg>
   <tag1>data1</tag1>
   ...
 </msg>
</doc>
<?xml version="1.0" encoding="utf-8"?>
<doc>
 <msg>
   <tag1>data2</tag1>
   ...
 </msg>
</doc>

我怎样才能获得正确的格式

<?xml version="1.0" encoding="utf-8"?>
<doc>
 <msg>
   <tag1>data1</tag1>
   ...
 </msg>
 <msg>
   <tag1>data2</tag1>
   ...
 </msg>
</doc>

我试过下面的代码

 XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
    File file = new File(outputFile);
    Writer fw = null;
    XMLStreamWriter w = null;

    try {
        if(!file.isFile()) {
            file.createNewFile();
        }
        fw = new OutputStreamWriter(new FileOutputStream(file, true), "UTF-8"); 
        w = outputFactory.createXMLStreamWriter(fw);
        w.writeStartDocument("utf-8", "1.0");
        w.writeStartElement("doc");

        createMessageElement(fingerPrint, w, data);//method to write data

        w.writeEndElement();
        w.writeEndDocument();

        w.flush();
        w.close();

        w.close();

        fw.flush();
        fw.close();

请给我建议。我是 StAX 的新手。

【问题讨论】:

  • 您是否考虑过使用 DOM 创建 XML?

标签: java xml stax


【解决方案1】:

您的示例只是将新的 xml 文档附加到文件末尾。如果您想将数据附加到现有的 xml 文档,您必须读取源 xml,并将其写入另一个文件,根据需要插入您的新元素....有关使用 stax api 的示例,请参阅http://docs.oracle.com/javase/tutorial/jaxp/stax/example.html#bnbgq

【讨论】:

    【解决方案2】:

    使用下面的代码获得输出。

    XMLOutputFactory 工厂 = XMLOutputFactory.newInstance();

        try {
    
            XMLStreamWriter writer1 = factory.createXMLStreamWriter(new FileWriter("E:\\sampleXML.xml"));
    
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            XMLStreamWriter2 xtw = (XMLStreamWriter2) new WstxOutputFactory()
                    .createXMLStreamWriter(byteArrayOutputStream, "UTF-8");
    
            xtw.writeStartDocument("UTF-8", "1.1");
    
            xtw.writeStartElement("doc");
    
            XMLStreamWriter2 writer2 = createMessageElement(xtw);
    
            writer2.writeStartElement("msg");
            writer2.writeStartElement("tag1");
            writer2.writeCharacters("data1");
            writer2.writeEndElement();
            writer2.writeStartElement("tag2");
            writer2.writeCharacters("data2");
            writer2.writeEndElement();
    
    
            writer2.writeEndDocument();
            writer2.close();
            xtw.flush();
            xtw.close();
    
            System.out.println("XML :" + new String(byteArrayOutputStream.toByteArray()));
    
        } catch (XMLStreamException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    
    private static XMLStreamWriter2 createMessageElement(XMLStreamWriter2 writer2)
            throws XMLStreamException, IOException {
            try {
            writer2.writeStartElement("msg");
            writer2.writeStartElement("tag1");
            writer2.writeCharacters("data1");
            writer2.writeEndElement();
            writer2.writeStartElement("tag2");
            writer2.writeCharacters("data2");
            writer2.writeEndElement();
    
            writer2.writeEndElement();
    
            writer2.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return writer2;
    
    }
    

    【讨论】:

      猜你喜欢
      • 2016-10-30
      • 2014-12-22
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多