java StAX - автономное свойство StartDocument

Я хочу читать, манипулировать и писать XML-файл. Я хотел начать с просто читать и писать, а затем манипулировать позже.

Я использую StAX Parser и хочу использовать EventReader и EventWriter.

Я столкнулся с первой проблемой, когда захотел прочитать и написать элемент StartDocument.

Входные данные:

<?xml version="1.0" encoding="iso-8859-15" standalone="yes"?>

Вывод в файл "data_output_test.xml":

<?xml version="1.0" encoding="iso-8859-15"?>

Я создал объект startDocument явно с

eventFactory.createStartDocument("iso-8859-15", "1.0", true);

Но свойство не отображается, когда я записываю новый объект startDocument в файл.

Вот мой код:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

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.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.XMLEvent;

public class XML_ReadWrite{

    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        XMLInputFactory factory_in = null;
        XMLOutputFactory factory_out = null;
        XMLEventReader  eventReader = null;
        XMLEventFactory  eventFactory = null;
        XMLEventWriter eventWriter = null;
        XMLEvent event_out = null;
        XMLEvent event_in = null;

        try {
            factory_in = XMLInputFactory.newInstance();
            eventReader  = factory_in.createXMLEventReader (getReader("data_test.xml", "iso-8859-15"));
        } catch (XMLStreamException e) {
            e.printStackTrace();
            return;
        } catch (Exception e) {
            //UnsupportedEncodingException or FileNotFoundException
            e.printStackTrace();
            return;
        }

        try {
            factory_out = XMLOutputFactory.newInstance();
            eventFactory = XMLEventFactory.newInstance();
            eventWriter = factory_out.createXMLEventWriter(getWriter("data_output_test.xml", "iso-8859-15"));
            event_out = eventFactory.createStartDocument(null, "1.0", true);
            eventWriter.add(event_out);
            eventWriter.flush();
        } catch (XMLStreamException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            //UnsupportedEncodingException or FileNotFoundException
            e.printStackTrace();
            return;
        }

        while(eventReader.hasNext()){

            try {
            event_in = eventReader.nextEvent();
            } catch (XMLStreamException e) {
                e.printStackTrace();
            continue;
            }

            if(event_in.getEventType() == XMLStreamConstants.START_DOCUMENT){
                System.out.println("StartElement: " + event_in.isStartDocument());
                System.out.println("StartElement: " + event_in.toString());             
            }
        }       
    }


    public static InputStreamReader getReader(String filename, String encoding) throws Exception {
        FileInputStream in = new FileInputStream(filename);
        InputStreamReader r = null;
        r = new InputStreamReader(in, encoding);
        return r;
    }

    public static OutputStreamWriter getWriter(String filename, String encoding) throws Exception {
        FileOutputStream out = new FileOutputStream(filename);
        OutputStreamWriter w = new OutputStreamWriter(out, encoding);
        return w;
    }
}

Есть ли способ заставить XMLEventWriter написать его автономное свойство?

Вторая проблема в том, что кодировка не распознается, когда я

event_in.toString()

на событие startDocument.

Выход моей программы:

StartElement: true
StartElement: <?xml version="1.0" encoding='null' standalone='yes'?>

Это почему?

Заранее спасибо

Ответы на вопрос(0)

Ваш ответ на вопрос