Теперь пришло время использовать фильтр. Первым делом нужно создать новый экземпляр, а затем назначить его предком исходный XMLReader.
Затем установите обработчики содержимого и ошибок фильтра, отличные от обработчиков XMLReader.
Наконец, используйте фильтр для разбора файла вместо XMLReader.
Поскольку XMLReader определен как предок фильтра, он будет по-прежнему обрабатывать информацию.
... public static void main (String args[]) { XMLReader xmlReader = null; try { SAXParserFactory spfactory = SAXParserFactory.newInstance(); spfactory.setValidating(false); SAXParser saxParser = spfactory.newSAXParser(); xmlReader = saxParser.getXMLReader(); SurveyFilter xmlFilter = new SurveyFilter(); xmlFilter.setParent(xmlReader); xmlFilter.
setContentHandler(new SurveyReader()); xmlFilter.
setErrorHandler(new SurveyReader()); InputSource source = new InputSource("surveys.xml"); xmlFilter.
parse(source); } catch (Exception e) { System.err.println(e); System.exit(1); } } ...
Глубина вложения для такой возможности не ограничена. Теоретически, вы можете создавать сколь угодно длинную цепочку фильтров, каждый из которых вызывает следующий.