java/alt2xml-cli/src/cz/frantovo/alt2xml/cli/EchoContentHandler.java
author František Kučera <franta-hg@frantovo.cz>
Sat, 07 Jun 2014 10:49:42 +0200
changeset 16 b2fbb3570ae1
parent 11 java/alt2xml-bin/src/cz/frantovo/alt2xml/výstup/EchoContentHandler.java@aaf6648af0aa
child 19 a58dce1054af
permissions -rw-r--r--
přesun tříd do správných projektů/balíčků
     1 /**
     2  * Alt2XML
     3  * Copyright © 2014 František Kučera (frantovo.cz)
     4  *
     5  * This program is free software: you can redistribute it and/or modify
     6  * it under the terms of the GNU General Public License as published by
     7  * the Free Software Foundation, either version 3 of the License, or
     8  * (at your option) any later version.
     9  *
    10  * This program is distributed in the hope that it will be useful,
    11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    13  * GNU General Public License for more details.
    14  *
    15  * You should have received a copy of the GNU General Public License
    16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
    17  */
    18 package cz.frantovo.alt2xml.cli;
    19 
    20 import javax.xml.stream.XMLStreamException;
    21 import javax.xml.stream.XMLStreamWriter;
    22 import org.xml.sax.Attributes;
    23 import org.xml.sax.SAXException;
    24 import org.xml.sax.helpers.DefaultHandler;
    25 
    26 /**
    27  * Slouží k převodu právě parsovaného XML zpět na XML.
    28  * Určen pro testování a ladění a pro použití s neobvyklými „XML“ parsery,
    29  * které nečtou XML ale jiný jazyk (např. JSON, INI atd.), ale používají stejné rozhraní (SAX).
    30  * 
    31  * TODO: další typy uzlů a jmenné prostory.
    32  * @author fiki
    33  */
    34 public class EchoContentHandler extends DefaultHandler {
    35 
    36 	private XMLStreamWriter w;
    37 
    38 	/**
    39 	 * @param writer kam se bude vypisovat XML.
    40 	 */
    41 	public EchoContentHandler(XMLStreamWriter writer) {
    42 		w = writer;
    43 	}
    44 
    45 	@Override
    46 	public void startDocument() throws SAXException {
    47 		try {
    48 			w.writeStartDocument();
    49 		} catch (XMLStreamException e) {
    50 			throw new SAXException(e);
    51 		}
    52 	}
    53 
    54 	@Override
    55 	public void endDocument() throws SAXException {
    56 		try {
    57 			w.writeEndDocument();
    58 			w.close();
    59 		} catch (XMLStreamException e) {
    60 			throw new SAXException(e);
    61 		}
    62 	}
    63 
    64 	@Override
    65 	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
    66 		try {
    67 			w.writeStartElement(qName);
    68 
    69 			if (attributes != null) {
    70 				for (int i = 0; i < attributes.getLength(); i++) {
    71 					w.writeAttribute(attributes.getQName(i), attributes.getValue(i));
    72 				}
    73 			}
    74 
    75 			w.flush();
    76 		} catch (XMLStreamException e) {
    77 			throw new SAXException(e);
    78 		}
    79 	}
    80 
    81 	@Override
    82 	public void endElement(String uri, String localName, String qName) throws SAXException {
    83 		try {
    84 			w.writeEndElement();
    85 			w.flush();
    86 		} catch (XMLStreamException e) {
    87 			throw new SAXException(e);
    88 		}
    89 	}
    90 
    91 	@Override
    92 	public void characters(char[] ch, int start, int length) throws SAXException {
    93 		try {
    94 			w.writeCharacters(ch, start, length);
    95 			w.flush();
    96 		} catch (XMLStreamException e) {
    97 			throw new SAXException(e);
    98 		}
    99 	}
   100 }