StaX jak ustawid kodowanie xml-a

0

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,

0

Kowodanie nie ma nic wspolnego z eventami. Musisz po prostu podac Writera z odpowiednim kodowaniem jako cel.

0

To znaczy, możesz napisać przykład?

0

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.

0

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.

0

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.

0

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

0

Dostalesz przeciez bardzo konkretne odpowiedzi, kazdy myslacy potrafilby sklecic dzialajacy kod, wiec o co chodzi?

0

Ten kod z przykładu wyświetla błąd: The method createXMLStreamWriter(Writer) in the type XMLOutputFactory is not applicable for the arguments (XMLStreamWriter)

0

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");

1 użytkowników online, w tym zalogowanych: 0, gości: 1