Введение в SAX

Создание фильтра


Теперь вы хотите создать фильтр, который уничтожает исходные ответы и вместо них использует исправленные ответы. Чтобы сделать это, вам нужно стереть оригиналы, а затем изменить пространство имен на исправленные ответы, так что SurveyReader сможет подхватить их.

Это реализовано путем создания нового класса, который расширяет XMLFilterImpl.

Взгляните, что происходит здесь. Когда происходит событие startElement(), оно проверяет URI исходного пространства имен. Если это элемент revised, пространство имен изменяется на пространство имен по умолчанию. Если нет, имя элемента изменяется так, что процедура подсчета (в SurveyReader) не будет распознавать его как вопрос и, следовательно, не будет учитывать ответ.

Эти измененные данные передаются в startElement() для предка (исходного XMLReader), и ими занимается его обработчик содержимого.

import org.xml.sax.helpers.XMLFilterImpl; import org.xml.sax.XMLReader; import org.xml.sax.SAXException; import org.xml.sax.Attributes; public class SurveyFilter extends XMLFilterImpl { public SurveyFilter () {} public SurveyFilter (XMLReader parent) { super(parent); } public void startElement (String uri, String localName, String qName, Attributes atts) throws SAXException { if (uri == "http://www.nicholaschase.com/surveys/revised/") { uri = "http://www.nicholaschase.com/surveys/"; qName = "question"; } else { localName = "REJECT"; } super.startElement(uri, localName, qName, atts); } }



Содержание раздела