java/alt2xml/src/cz/frantovo/alt2xml/EchoContentHandler.java
author František Kučera <franta-hg@frantovo.cz>
Mon, 02 Jan 2012 20:15:52 +0100
changeset 2 be5bfbe1f0cd
permissions -rw-r--r--
První nástřel – trochu už to funguje, převádí JSON na XML.
franta-hg@2
     1
package cz.frantovo.alt2xml;
franta-hg@2
     2
franta-hg@2
     3
import javax.xml.stream.XMLStreamException;
franta-hg@2
     4
import javax.xml.stream.XMLStreamWriter;
franta-hg@2
     5
import org.xml.sax.Attributes;
franta-hg@2
     6
import org.xml.sax.SAXException;
franta-hg@2
     7
import org.xml.sax.helpers.DefaultHandler;
franta-hg@2
     8
franta-hg@2
     9
/**
franta-hg@2
    10
 * Slouží k převodu právě parsovaného XML zpět na XML.
franta-hg@2
    11
 * Určen pro testování a ladění a pro použití s neobvyklými „XML“ parsery,
franta-hg@2
    12
 * které nečtou XML ale jiný jazyk (např. JSON, INI atd.), ale používají stejné rozhraní (SAX).
franta-hg@2
    13
 * 
franta-hg@2
    14
 * TODO: další typy uzlů a jmenné prostory.
franta-hg@2
    15
 * @author fiki
franta-hg@2
    16
 */
franta-hg@2
    17
public class EchoContentHandler extends DefaultHandler {
franta-hg@2
    18
franta-hg@2
    19
	private XMLStreamWriter w;
franta-hg@2
    20
franta-hg@2
    21
	/**
franta-hg@2
    22
	 * @param writer kam se bude vypisovat XML.
franta-hg@2
    23
	 */
franta-hg@2
    24
	public EchoContentHandler(XMLStreamWriter writer) {
franta-hg@2
    25
		w = writer;
franta-hg@2
    26
	}
franta-hg@2
    27
franta-hg@2
    28
	@Override
franta-hg@2
    29
	public void startDocument() throws SAXException {
franta-hg@2
    30
		try {
franta-hg@2
    31
			w.writeStartDocument();
franta-hg@2
    32
		} catch (XMLStreamException e) {
franta-hg@2
    33
			throw new SAXException(e);
franta-hg@2
    34
		}
franta-hg@2
    35
	}
franta-hg@2
    36
franta-hg@2
    37
	@Override
franta-hg@2
    38
	public void endDocument() throws SAXException {
franta-hg@2
    39
		try {
franta-hg@2
    40
			w.writeEndDocument();
franta-hg@2
    41
			w.close();
franta-hg@2
    42
		} catch (XMLStreamException e) {
franta-hg@2
    43
			throw new SAXException(e);
franta-hg@2
    44
		}
franta-hg@2
    45
	}
franta-hg@2
    46
franta-hg@2
    47
	@Override
franta-hg@2
    48
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
franta-hg@2
    49
		try {
franta-hg@2
    50
			w.writeStartElement(qName);
franta-hg@2
    51
franta-hg@2
    52
			if (attributes != null) {
franta-hg@2
    53
				for (int i = 0; i < attributes.getLength(); i++) {
franta-hg@2
    54
					w.writeAttribute(attributes.getQName(i), attributes.getValue(i));
franta-hg@2
    55
				}
franta-hg@2
    56
			}
franta-hg@2
    57
franta-hg@2
    58
			w.flush();
franta-hg@2
    59
		} catch (XMLStreamException e) {
franta-hg@2
    60
			throw new SAXException(e);
franta-hg@2
    61
		}
franta-hg@2
    62
	}
franta-hg@2
    63
franta-hg@2
    64
	@Override
franta-hg@2
    65
	public void endElement(String uri, String localName, String qName) throws SAXException {
franta-hg@2
    66
		try {
franta-hg@2
    67
			w.writeEndElement();
franta-hg@2
    68
			w.flush();
franta-hg@2
    69
		} catch (XMLStreamException e) {
franta-hg@2
    70
			throw new SAXException(e);
franta-hg@2
    71
		}
franta-hg@2
    72
	}
franta-hg@2
    73
franta-hg@2
    74
	@Override
franta-hg@2
    75
	public void characters(char[] ch, int start, int length) throws SAXException {
franta-hg@2
    76
		try {
franta-hg@2
    77
			w.writeCharacters(ch, start, length);
franta-hg@2
    78
			w.flush();
franta-hg@2
    79
		} catch (XMLStreamException e) {
franta-hg@2
    80
			throw new SAXException(e);
franta-hg@2
    81
		}
franta-hg@2
    82
	}
franta-hg@2
    83
}