Методы, которые...
Листинг 9.14. Методы, которые поддерживают поиск заголовков по ключевым словам (NewsModel.java)
// return true if one of the keys appears //in the headline_text element private boolean searchArticle( Element aE, String[] keys ){ NodeList htNL = aE.getElementsByTagName("headline_text");
if( htNL.getLength() == 0 ) return false ; // there is only one headline_text Element htE = (Element)htNL.item(0);
String str = getFullText( htE ).toUpperCase() ; for( int i = 0 ; i < keys.length ; i++ ){ if( str.indexOf( keys[i] ) >
= 0 ) return true ; } return false ; } // this is needed to cope with headline text that has entities private String getFullText( Node nd ){ NodeList nl = nd.getChildNodes();
int ct = nl.getLength();
if( ct == 0 ) return ""; if( ct == 1 ) return nd.getFirstChild().getNodeValue();
StringBuffer sb = new StringBuffer();
for( int i = 0 ; i < ct ; i++ ){ Node n = nl.item(i);
if( n instanceof EntityReference ){ // reconstruct & notation sb.append( '&' );
sb.append( n.getNodeName());
sb.append( ';' );
} else { sb.append( n.getNodeValue() );
} } return sb.toString();
}
Метод locateCategories (см. листинг 9.12) создал коллекцию clusterHash, в которой элементы (заголовки сообщений) хранятся в соответствии со своими тегами <cluster>
. Мы не совсем понимаем, почему в Moreover.com этот элемент называется cluster (кластер) — нам кажется, что более подходящим названием для этого тега было бы topic (тема);
поэтому метод, приведенный в листинге 9.15, называется articlesByTopic (статьи по темам). В этом листинге также показан метод getAllTopics, который просто превращает весь список узлов articleNodeList в массив типа Element.
Содержание раздела