Приведенные выше примеры рассматривали основы работы с данными, но это только поверхностный взгляд на то, сто может делать SAX. Данные могут быть направлены в другой процессор SAX, на преобразование или (конечно же) в файл. В этом разделе я покажу вам некоторые из этих вариантов.
Вывод потока событий SAX в файл называется его сериализацией. Вы можете написать файл сами, но гораздо легче просто объект Serializer:
import org.apache.xalan.serialize.Serializer; import org.apache.xalan.serialize.SerializerFactory; import org.apache.xalan.templates.OutputProperties; import java.io.FileOutputStream;
... public static void main (String args[]) { XMLReader xmlReader = null; try { SAXParserFactory spfactory = SAXParserFactory.newInstance(); spfactory.setValidating(false); SAXParser saxParser = spfactory.newSAXParser(); xmlReader = saxParser.getXMLReader(); Serializer serializer = SerializerFactory.getSerializer( OutputProperties.getDefaultMethodProperties("xml")); serializer.setOutputStream(new FileOutputStream("output.xml"));
xmlReader.setContentHandler( serializer.asContentHandler()
); InputSource source = new InputSource("surveys.xml"); xmlReader.parse(source); } catch (Exception e) { System.err.println(e); System.exit(1); } } ...
Создайте объект Serializer - допустимыми значениями для OutputProperties являются xml, text и html - и установите его OutputStream. Этот поток может быть виртуально любым объектом потокового типа, таким как файл (как здесь) или System.out.
Вы можете затем установить Serializer как обработчик содержимого для парсера, так что, когда парсер разбирает файл, именно Serializer принимает события.