Метод, который выбирает...
Листинг 8.10. Метод, который выбирает сообщения по указанным темам (NewsFormatter.java)
// based on String with topics separated by commas // example attribute topics="general,books,java" // output capability only used for debugging private int selectNodes(String topics, PrintWriter out ){ Hashtable recognize = new Hashtable();
StringTokenizer st = new StringTokenizer ( topics.toUpperCase(), ",");
while( st.hasMoreTokens()){ String tmp = st.nextToken().trim();
recognize.put( tmp,tmp );
} // hashtable can now be used to recognize selected topics Vector v = new Vector( itemNodes.length );
int i ; for( i = 0 ; i < itemNodes.length ; i++ ){ Node n = itemNodes[i]; // <Newsitem nodes String t = ((Element)n).getAttribute("topic");
st = new StringTokenizer(t.toUpperCase(),",");
while( st.hasMoreElements()){ // we just use hashtable get to see if topic is present if( recognize.get( st.nextToken().trim() ) != null ){ v.addElement(n);
break; } } // end while over topic list } // end loop over all nodes // build new array from selected nodes itemNodes = new Node[ v.size() ]; for( i = 0 ; i < v.size();
i++ ){ itemNodes[i] = (Node) v.elementAt(i);
} return itemNodes.length ; }
Метод findNodes, показанный в листинге 8.11, вызывается для каждого сообщения, которое должно быть помещено на страницу. Входной элемент Element — это узел Newsltem документа XML. Метод findNodes создает переменную nodeHash, которая позволяет другим методам извлекать дочерние элементы Newsltem, например <short>
, из коллекции nodeHash. Ключами элементов в этой хэш-таблице являются имена узлов.
Содержание раздела