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'?>
Это почему?
Заранее спасибо