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

         

Начало кода класса TallyQues (TallyQues.java)



Листинг 7.26. Начало кода класса TallyQues (TallyQues.java)

package com.XmlEcomBook.Chap07; import java.io.* ; import java.util.* ; import org.w3c.dom.* ; import org.xml.sax.* ; import org.xml.sax.helpers.ParserFactory ; import com.sun.xml.parser.Resolver ; /* org.xml.sax.HandlerBase is a convenience class that extends java.lang.Object and implements the SAX interfaces implements EntityResolver, DTDHandler, DocumentHandler, ErrorHandler */ public class TallyQues extends HandlerBase { static public String parserClass = "com.sun.xml.parser.Parser" ; private Hashtable tally = new Hashtable();
// Counters keyed by unique // ordered has a Vector of Counters per question private Vector ordered = new Vector();
private Hashtable qtext = new Hashtable();
// <Qtext>
by id public String tableStyle = "align=\"center\" border=\"3\" " ; public String lastErr = null ; public int resultCt = 0 ; String id ; // <Ques>
attribute "id" as detected during parse // constructor creates the vectors and hashtables to store results // qd is the questionnaire source XML doc public TallyQues( Document qd ){ Element E = qd.getDocumentElement();
NodeList qnl = E.getElementsByTagName("Ques");
int ct = qnl.getLength();
for( int i = 0; i < ct ; i++ ){ Vector quesv = new Vector();
// for this <Ques>
ordered.addElement( quesv );
E = (Element)qnl.item(i);
// Element is a <Ques>
NodeList txn = E.getElementsByTagName("Qtext");
String tx = txn.item(0).getFirstChild().getNodeValue();
// question text String id = E.getAttribute( "id" );
qtext.put( id, tx );
quesv.addElement( id );
// first element of quesv is the id NodeList opt = E.getElementsByTagName("Qopt");
int opct =opt.getLength();
for( int n = 0 ; n < opct ; n++ ){ Element opE = (Element) opt.item(n);
String val = opE.getAttribute("val");
String text = opE.getFirstChild().getNodeValue();
Counter cntr = new Counter( id, val, text );
quesv.addElement( cntr );
tally.put( cntr.unique, cntr );
} } }

Обработка снимка опроса

Фактическая обработка файла, содержащего снимок результатов опроса, начинается с метода tallyAns. Как показано в листинге 7.27, работа этого метода состоит из следующих этапов.

  1. Файл открывается как объект org.xml .InputSource.



  2. Создается анализатор в соответствии со строкой parserClass (см. листинг 7.26). Мы используем анализатор из пакета Sun, но вы можете заменить его на любой подходящий вам анализатор.

  3. Объект TallyQues присоединяется к анализатору, с тем чтобы он мог получать вызовы методов обработки событий.

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

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



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