2016-03-01 2 views
3

Я хочу добавить данные в файл XML с помощью OutputStreamWriter, но в конечном итоге что-то вроде нижеДобавление данных в файл XML с помощью OutputStreamWriter (StAX анализатор)

<?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.

+0

Рассматривали ли вы создание XML с использованием DOM? –

ответ

1

Ваш пример только добавляет новый XML-документ в конец файла. Если вы хотите добавить данные в существующий xml-документ, вы должны прочитать исходный xml и записать его в другой файл, вставив новый элемент в качестве потребности .... см. http://docs.oracle.com/javase/tutorial/jaxp/stax/example.html#bnbgq для примера, используя stax api.

0

Используйте приведенный ниже код, вы получите выход.

XMLOutputFactory factory = 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; 

} 
Смежные вопросы