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




Выбор заголовков


Теперь мы подошли к рассмотрению методов сервлета, которые отвечают на запросы пользователя о поиске определенных заголовков сообщений. Для нашего примера мы ограничились двумя методами выбора заголовков: вы можете либо просмотреть всю коллекцию в поисках заголовков, которые содержат определенную последовательность символов, либо извлечь все заголовки, входящие в конкретную категорию.

При вызове метода articlesByKeyword, показанного в листинге 9.13, ему передается строка, содержащая одну или более последовательностей символов, разделенных запятыми. Первый шаг заключается в преобразовании этой строки keystring в массив типа String. Этот шаг выполняется методом prepKeys, который, кроме того, переводит все символы в верхний регистр. Далее метод searchArticle осуществляет поиск по всем элементам article и все совпадения возвращаются в виде массива ссылок на соответствующие элементы.

Листинг 9.13. Метод articlesByKeyWord вызывается сервлетом (NewsModel.java)

// articles by keyword appearance in headline // keys may be word or phrase, one or more, sep by comma // just use original order public Element[] articlesByKeyWord( String keystring ){ String[] keys = prepKeys( keystring ); // upper case and separated Vector v = new Vector(); int i ; int ct = articleNodeList.getLength(); for( i = 0 ; i < ct ; i++ ){ Element aE = (Element) articleNodeList.item( i ) ; if( searchArticle( aE, keys )){ v.addElement(aE); } } Element[] ret = new Element[ v.size() ]; for( i = 0 ; i < ret.length ; i++ ){ ret[i] = (Element) v.elementAt(i); } return ret ; } // convert to upper case and separate at commas private String[] prepKeys( String s ){ StringTokenizer st = new StringTokenizer( s.toUpperCase(), ","); String[] ret = new String[ st.countTokens() ]; int i = 0 ; while( st.hasMoreTokens() ){ ret[i++] = st.nextToken().trim(); } return ret ; }

Метод searchArticle, как показано в листинге 9.14, сложнее, чем вы, возможно, ожидали. Это объясняется некоторыми особенностями анализатора XML. Рассмотрим содержимое элемента <headline_text>, куда включена сущность (например, &атр;):




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