Электронный магазин на Java и XML

         

Класс для создания таблиц - часть 3


Вызывается метод parse и начинается анализ.

Если не происходит никаких ошибок, то по выполнении метода parse таблица готова. Если происходит ошибка, метод tallyAns возвращает null, а если все прошло успешно, то возвращается переменная ordered.

Листинг 7.27. Метод tallyAns (TallyQues.java)

// srcdoc is complete path to a formatted answer set file public Vector tallyAns(String srcdoc ){ Parser parser ; InputSource input ; try { File f = new File( srcdoc ); input = Resolver.createInputSource( f ); parser = ParserFactory.makeParser( parserClass ); parser.setDocumentHandler( this ); System.out.println("Start parse"); parser.parse( input ); }catch(SAXParseException spe){ StringBuffer sb = new StringBuffer( spe.toString() ); sb.append("\n Line number: " + spe.getLineNumber()); sb.append("\nColumn number: " + spe.getColumnNumber() ); sb.append("\n Public ID: " + spe.getPublicId() ); sb.append("\n System ID: " + spe.getSystemId() + "\n"); lastErr = sb.toString(); ordered = null ; }catch(Exception e){ lastErr = e.toString(); ordered = null ; } return ordered ;

Обработка событий с помощью интерфейса SAX

Теперь рассмотрим метод обработки событий, относящийся к методам интерфейса SAX и представленный в листинге 7.28. Из всех методов интерфейса SAX нам нужен только один — startElement. Для каждого тега Ques мы получаем значение атрибута id, которое используется вместе с тегами Qopt, содержащими варианты ответов на вопрос Ques Для каждого тега Qopt мы создаем строку, которая объединяет значение атрибута id вопроса со значением атрибута val элемента Qopt (варианта ответа) Эта строка используется как ключ для извлечения из хэш-таблицы tally соответствующего объекта класса Counter Таким образом подсчитывается, сколько раз встретился данный вариант ответа на данный вопрос анкеты

Листинг 7.28. Методы обработки событий SAX (TallyQues.java)

// this is the SAX specified "callback" called when the // parser detects an element public void startElement( String name, AttributeList attrib) throws SAXException { if( name.equals("Ques") ){ id = attrib.getValue("id"); } else { if( name.equals("Qopt") ){ String unique = id + ":" + attrib.getValue("val"); Counter cntr = (Counter)tally.get( unique ); if( cntr != null ) cntr.countIt(); } else { if( name.equals("Qresults"))resultCt++ ; } } }




Содержание  Назад  Вперед