3 * Copyright © 2014 František Kučera (frantovo.cz)
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.
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.
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/>.
18 package cz.frantovo.alt2xml.out.xml;
20 import java.util.logging.Logger;
21 import javax.xml.stream.XMLStreamException;
22 import javax.xml.stream.XMLStreamWriter;
23 import org.xml.sax.Attributes;
24 import org.xml.sax.SAXException;
25 import org.xml.sax.helpers.DefaultHandler;
28 * Slouží k převodu právě parsovaného XML zpět na XML.
29 * Určen pro testování a ladění a pro použití s neobvyklými „XML“ parsery,
30 * které nečtou XML ale jiný jazyk (např. JSON, INI atd.), ale používají stejné rozhraní (SAX).
32 * TODO: další typy uzlů a jmenné prostory.
34 * @author Ing. František Kučera (frantovo.cz)
36 public class XMLHandler extends DefaultHandler {
38 private static final Logger log = Logger.getLogger(XMLHandler.class.getName());
39 private XMLStreamWriter w;
41 public XMLHandler(XMLStreamWriter writer) {
46 public void startDocument() throws SAXException {
48 w.writeStartDocument();
49 } catch (XMLStreamException e) {
50 throw new SAXException(e);
55 public void endDocument() throws SAXException {
59 } catch (XMLStreamException e) {
60 throw new SAXException(e);
65 public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
67 w.writeStartElement(qName);
69 if (attributes != null) {
70 for (int i = 0; i < attributes.getLength(); i++) {
71 w.writeAttribute(attributes.getQName(i), attributes.getValue(i));
76 } catch (XMLStreamException e) {
77 throw new SAXException(e);
82 public void endElement(String uri, String localName, String qName) throws SAXException {
86 } catch (XMLStreamException e) {
87 throw new SAXException(e);
92 public void characters(char[] ch, int start, int length) throws SAXException {
94 w.writeCharacters(ch, start, length);
96 } catch (XMLStreamException e) {
97 throw new SAXException(e);
102 * LexicalHandler methods
105 * public void startDTD(String name, String publicId, String systemId) throws SAXException {
106 * log.log(Level.WARNING, "Start of DTD: {0} | {1} | {2}", new Object[]{name, publicId,
111 * public void endDTD() throws SAXException {
112 * log.log(Level.WARNING, "End of DTD");
116 * public void startEntity(String name) throws SAXException {
117 * log.log(Level.WARNING, "Start of Entity: {0}", name);
121 * public void endEntity(String name) throws SAXException {
122 * log.log(Level.WARNING, "End of Entity: {0}", name);
126 * public void startCDATA() throws SAXException {
127 * log.log(Level.WARNING, "Start of CDATA");
131 * public void endCDATA() throws SAXException {
132 * log.log(Level.WARNING, "End of CDATA");
136 * public void comment(char[] ch, int start, int length) throws SAXException {
138 * w.writeComment(new String(ch, start, length));
140 * } catch (XMLStreamException e) {
141 * throw new SAXException(e);