Witam!
Potrzebuje wygenerować dokument xml który będzie zapisany w kodowaniu windows-1250. W jaki sposób dokonać tego z pomocą StaX ale wykorzystując eventy.
Pozdrawiam,
Witam!
Potrzebuje wygenerować dokument xml który będzie zapisany w kodowaniu windows-1250. W jaki sposób dokonać tego z pomocą StaX ale wykorzystując eventy.
Pozdrawiam,
Kowodanie nie ma nic wspolnego z eventami. Musisz po prostu podac Writera z odpowiednim kodowaniem jako cel.
To znaczy, możesz napisać przykład?
Przyklad dla 'cursor api':
Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("plik.xml"), "cp-1250"));
XMLOutputFactory output = XMLOutputFactory.newInstance();
XMLStreamWriter writer = output.createXMLStreamWriter(writer);
writer.writeStartDocument();
writer.setPrefix("c","http://c");
writer.setDefaultNamespace("http://c");
writer.writeStartElement("http://c","a");
writer.writeAttribute("b","blah");
writer.writeNamespace("c","http://c");
writer.writeDefaultNamespace("http://c");
writer.setPrefix("d","http://c");
writer.writeEmptyElement("http://c","d");
writer.writeAttribute("http://c", "chris","fry");
writer.writeNamespace("d","http://c");
writer.writeCharacters("Jean Arp");
writer.writeEndElement();
writer.flush();
Wlasciwie, caly przyklad jest stad: http://docs.oracle.com/javase/tutorial/jaxp/stax/using.html#indexterm-40 (plus tworzenie writera).
Tworzenie Writera rowniez mozna znalezc w tym tutorialu. Szukanie nie boli, google jest za free.
Jaki ma sens zakładanie jakiegokolwiek forum w internecie skoro google jest za free?
Z tego co wyczytałem to StaX pozwala tworzyć dokumenty na dwa sposoby: za pomocą kursora – interfejsy ze Stream w nazwie, za pomocą zdarzeń – interfejsy z Event w nazwie. Moje pytanie dotyczy jak podać kodowanie drugą metodą, przykład napisany przez Ciebie notabene który znalazłem wcześniej, opisuje tworzenie metodą pierwszą.
Posiadam kod:
// Create a XMLOutputFactory
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
// Create XMLEventWriter
XMLEventWriter eventWriter = outputFactory.createXMLEventWriter(new FileOutputStream(configFile));
// Create a EventFactory
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
XMLEvent end = eventFactory.createDTD("\n");
// Create and write Start Tag
StartDocument startDocument = eventFactory.createStartDocument();
eventWriter.add(startDocument);
Patrząc analogicznie to mogło by wyglądać tak:
XMLEventWriter eventWriter = outputFactory.createXMLEventWriter(new FileOutputStream(configFile), "cp-1250");
Ale takie rozwiązanie nie działa.
Więc gdzie ustala się kodowanie znaków?
Sprawdziłem jeszcze raz dla innych kodowań i działa dla UTF-8, dla UTF-9 wyświetla błędy, a dla windows-1250 nie ustala kodowania, dla cp-1250 znów wyświetla błędy.
Nie jest to analigiczne. Nie wiem czy widzisz ze ja tworze OutputStreamWritera ktory bierze strumien i kodowanie jako argumenty. Nie dziwota ze nie umiesz znalezc nic w google, czytac nie umiesz, a pisanie (zapytan) jest jeszcze trudniejesze.
Słuchaj ziomek, tak masz rację nie znam się na programowaniu, bo gdybym się znał to raczej by mnie tu nie było. Nie umiem zapytać konkretnie bo to wynika z pierwszego. Ni mniej ni więcej, ale forum to raczej nie jest miejsce by się wymądrzać, a pomagać.
Dostalesz przeciez bardzo konkretne odpowiedzi, kazdy myslacy potrafilby sklecic dzialajacy kod, wiec o co chodzi?
Ten kod z przykładu wyświetla błąd: The method createXMLStreamWriter(Writer) in the type XMLOutputFactory is not applicable for the arguments (XMLStreamWriter)
Dlaczego w pliku XML nie ma ustalonego kodowania?
XMLEventWriter eventWriter = outputFactory.createXMLEventWriter(new FileOutputStream(configFile), "windows-1250");
Z tego co widzę plik jest zapisany w windows-1250, ale plik xml wygląda tak:
<?xml version="1.0"?>
Jak ustawić deklarację standardu kodowania?
Znalazłem:
StartDocument startDocument = eventFactory.createStartDocument("windows-1250");