java/alt2xml-out-xml/src/cz/frantovo/alt2xml/out/xml/XMLHandler.java
author František Kučera <franta-hg@frantovo.cz>
Thu, 24 Oct 2019 21:56:03 +0200
changeset 111 e4900596abdb
parent 43 058c1c39251e
permissions -rw-r--r--
fix license version: GNU GPLv3
franta-hg@11
     1
/**
franta-hg@11
     2
 * Alt2XML
franta-hg@11
     3
 * Copyright © 2014 František Kučera (frantovo.cz)
franta-hg@11
     4
 *
franta-hg@11
     5
 * This program is free software: you can redistribute it and/or modify
franta-hg@11
     6
 * it under the terms of the GNU General Public License as published by
franta-hg@111
     7
 * the Free Software Foundation, version 3 of the License.
franta-hg@11
     8
 *
franta-hg@11
     9
 * This program is distributed in the hope that it will be useful,
franta-hg@11
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
franta-hg@11
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
franta-hg@11
    12
 * GNU General Public License for more details.
franta-hg@11
    13
 *
franta-hg@11
    14
 * You should have received a copy of the GNU General Public License
franta-hg@11
    15
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
franta-hg@11
    16
 */
franta-hg@43
    17
package cz.frantovo.alt2xml.out.xml;
franta-hg@2
    18
franta-hg@39
    19
import java.util.logging.Logger;
franta-hg@2
    20
import javax.xml.stream.XMLStreamException;
franta-hg@2
    21
import javax.xml.stream.XMLStreamWriter;
franta-hg@2
    22
import org.xml.sax.Attributes;
franta-hg@2
    23
import org.xml.sax.SAXException;
franta-hg@2
    24
import org.xml.sax.helpers.DefaultHandler;
franta-hg@2
    25
franta-hg@2
    26
/**
franta-hg@2
    27
 * Slouží k převodu právě parsovaného XML zpět na XML.
franta-hg@2
    28
 * Určen pro testování a ladění a pro použití s neobvyklými „XML“ parsery,
franta-hg@2
    29
 * které nečtou XML ale jiný jazyk (např. JSON, INI atd.), ale používají stejné rozhraní (SAX).
franta-hg@19
    30
 *
franta-hg@2
    31
 * TODO: další typy uzlů a jmenné prostory.
franta-hg@19
    32
 *
franta-hg@19
    33
 * @author Ing. František Kučera (frantovo.cz)
franta-hg@2
    34
 */
franta-hg@43
    35
public class XMLHandler extends DefaultHandler {
franta-hg@2
    36
franta-hg@43
    37
	private static final Logger log = Logger.getLogger(XMLHandler.class.getName());
franta-hg@2
    38
	private XMLStreamWriter w;
franta-hg@2
    39
franta-hg@43
    40
	public XMLHandler(XMLStreamWriter writer) {
franta-hg@2
    41
		w = writer;
franta-hg@2
    42
	}
franta-hg@2
    43
franta-hg@2
    44
	@Override
franta-hg@2
    45
	public void startDocument() throws SAXException {
franta-hg@2
    46
		try {
franta-hg@2
    47
			w.writeStartDocument();
franta-hg@2
    48
		} catch (XMLStreamException e) {
franta-hg@2
    49
			throw new SAXException(e);
franta-hg@2
    50
		}
franta-hg@2
    51
	}
franta-hg@2
    52
franta-hg@2
    53
	@Override
franta-hg@2
    54
	public void endDocument() throws SAXException {
franta-hg@2
    55
		try {
franta-hg@2
    56
			w.writeEndDocument();
franta-hg@2
    57
			w.close();
franta-hg@2
    58
		} catch (XMLStreamException e) {
franta-hg@2
    59
			throw new SAXException(e);
franta-hg@2
    60
		}
franta-hg@2
    61
	}
franta-hg@2
    62
franta-hg@2
    63
	@Override
franta-hg@2
    64
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
franta-hg@2
    65
		try {
franta-hg@2
    66
			w.writeStartElement(qName);
franta-hg@2
    67
franta-hg@2
    68
			if (attributes != null) {
franta-hg@2
    69
				for (int i = 0; i < attributes.getLength(); i++) {
franta-hg@2
    70
					w.writeAttribute(attributes.getQName(i), attributes.getValue(i));
franta-hg@2
    71
				}
franta-hg@2
    72
			}
franta-hg@2
    73
franta-hg@2
    74
			w.flush();
franta-hg@2
    75
		} catch (XMLStreamException e) {
franta-hg@2
    76
			throw new SAXException(e);
franta-hg@2
    77
		}
franta-hg@2
    78
	}
franta-hg@2
    79
franta-hg@2
    80
	@Override
franta-hg@2
    81
	public void endElement(String uri, String localName, String qName) throws SAXException {
franta-hg@2
    82
		try {
franta-hg@2
    83
			w.writeEndElement();
franta-hg@2
    84
			w.flush();
franta-hg@2
    85
		} catch (XMLStreamException e) {
franta-hg@2
    86
			throw new SAXException(e);
franta-hg@2
    87
		}
franta-hg@2
    88
	}
franta-hg@2
    89
franta-hg@2
    90
	@Override
franta-hg@2
    91
	public void characters(char[] ch, int start, int length) throws SAXException {
franta-hg@2
    92
		try {
franta-hg@2
    93
			w.writeCharacters(ch, start, length);
franta-hg@2
    94
			w.flush();
franta-hg@2
    95
		} catch (XMLStreamException e) {
franta-hg@2
    96
			throw new SAXException(e);
franta-hg@2
    97
		}
franta-hg@2
    98
	}
franta-hg@39
    99
franta-hg@39
   100
	/**
franta-hg@39
   101
	 * LexicalHandler methods
franta-hg@39
   102
	 *
franta-hg@39
   103
	 * @Override
franta-hg@39
   104
	 * public void startDTD(String name, String publicId, String systemId) throws SAXException {
franta-hg@39
   105
	 * log.log(Level.WARNING, "Start of DTD: {0} | {1} | {2}", new Object[]{name, publicId,
franta-hg@39
   106
	 * systemId});
franta-hg@39
   107
	 * }
franta-hg@39
   108
	 *
franta-hg@39
   109
	 * @Override
franta-hg@39
   110
	 * public void endDTD() throws SAXException {
franta-hg@39
   111
	 * log.log(Level.WARNING, "End of DTD");
franta-hg@39
   112
	 * }
franta-hg@39
   113
	 *
franta-hg@39
   114
	 * @Override
franta-hg@39
   115
	 * public void startEntity(String name) throws SAXException {
franta-hg@39
   116
	 * log.log(Level.WARNING, "Start of Entity: {0}", name);
franta-hg@39
   117
	 * }
franta-hg@39
   118
	 *
franta-hg@39
   119
	 * @Override
franta-hg@39
   120
	 * public void endEntity(String name) throws SAXException {
franta-hg@39
   121
	 * log.log(Level.WARNING, "End of Entity: {0}", name);
franta-hg@39
   122
	 * }
franta-hg@39
   123
	 *
franta-hg@39
   124
	 * @Override
franta-hg@39
   125
	 * public void startCDATA() throws SAXException {
franta-hg@39
   126
	 * log.log(Level.WARNING, "Start of CDATA");
franta-hg@39
   127
	 * }
franta-hg@39
   128
	 *
franta-hg@39
   129
	 * @Override
franta-hg@39
   130
	 * public void endCDATA() throws SAXException {
franta-hg@39
   131
	 * log.log(Level.WARNING, "End of CDATA");
franta-hg@39
   132
	 * }
franta-hg@39
   133
	 *
franta-hg@39
   134
	 * @Override
franta-hg@39
   135
	 * public void comment(char[] ch, int start, int length) throws SAXException {
franta-hg@39
   136
	 * try {
franta-hg@39
   137
	 * w.writeComment(new String(ch, start, length));
franta-hg@39
   138
	 * w.flush();
franta-hg@39
   139
	 * } catch (XMLStreamException e) {
franta-hg@39
   140
	 * throw new SAXException(e);
franta-hg@39
   141
	 * }
franta-hg@39
   142
	 * }
franta-hg@39
   143
	 */
franta-hg@2
   144
}