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




Выбор заголовков - часть 4


Работа этого метода заключается в отыскании символов <%, выделении имени элемента и вызове метода getContent для извлечения текста элемента из соответствующего объекта Element. Заметим, что метод getContent вызывает метод getFullText для получения полного текста выбранного элемента.

Листинг 9.17. Метод formatElement (NewsModel.java)

// Element known to be an article, formatting string public String formatElement( Element art, String fmt ){ StringBuffer sb = new StringBuffer( 3 * fmt.length() ); int p0 = 0 ; int p1 = fmt.indexOf("<%"); int p2 = fmt.indexOf('>', p1); while( p1 > p0 && p2 > p1 ){ sb.append( fmt.substring( p0, p1 )); sb.append( getContent( art, fmt.substring(p1 + 2, p2) )); p0 = p2 + 1 ; p1 = fmt.indexOf("<%", p0); if( p1 > p0 ){ p2 = fmt.indexOf('>', p1); } } sb.append( fmt.substring( p0 )); return sb.toString(); } // element known to be an article private String getContent( Element art, String key ){ NodeList nl = art.getElementsByTagName( key ); if( nl.getLength() == 0 ) return ""; Element kE = (Element)nl.item(0); return getFullText( kE ) ; }

Последняя часть кода класса NewsModel, приведенная в листинге 9.18, содержит метод she! 1 Sort и некоторые другие служебные методы.

Листинг 9.18. Метод для сортировки и другие служебные методы (NewsModel.java)

public void shellSort (String[] srted ) { // h is the separation between items we compare. int h = 1; while ( h < srted.length ) { h = 3 * h + 1; } // now h is optimum while ( h > 0 ) { h = (h - 1)/3; for ( int i = h; i < srted.length; ++i ) { String item = srted[i]; int j=0; for ( j = i - h; j >= 0 && compare( srted[j], item ) < 0; j -= h ) { srted[j+h] = srted[j]; } // end inner for srted[j+h] = item; } // end outer for } // end while } // end sort

// return -1 if a < b , 0 if equal, +1 if a > b int compare(String a, String b ){ String aa = a.toUpperCase() ; String bb = b.toUpperCase() ; return bb.compareTo( aa ) ; }

public String toString() { StringBuffer sb = new StringBuffer( "NewsModel " ); if( !usable ){ sb.append("is not usable due to "); sb.append( lastErr ); return sb.toString(); } sb.append("count of articles "); sb.append( Integer.toString( articleNodeList.getLength()) ); sb.append("Unique clusters " + clusterHash.size() ); sb.append("\n"); Enumeration keys = clusterHash.keys(); while( keys.hasMoreElements() ){ String key = (String)keys.nextElement(); Vector v = (Vector)clusterHash.get( key ); sb.append(" Topic: " ); sb.append( key ) ; sb.append(" has " ) ; sb.append(Integer.toString( v.size())); sb.append("\n"); } return sb.toString(); } }




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