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



         

Класс NewsFormatter - часть 6


Метод findNodes, показанный в листинге 8.11, вызывается для каждого сообщения, которое должно быть помещено на страницу. Входной элемент Element — это узел Newsltem документа XML. Метод findNodes создает переменную nodeHash, которая позволяет другим методам извлекать дочерние элементы Newsltem, например <short>, из коллекции nodeHash. Ключами элементов в этой хэш-таблице являются имена узлов.

Листинг 8.11. Метод findNodes класса NewsFormatter (NewsFormatter.java)

// locate the nodes that are Elements for text data private void findNodes( Element ne ){ NodeList nl = ne.getChildNodes(); // all nodes int ct = nl.getLength(); nodeHash = new Hashtable( 2 * ct ); for( int i = 0 ; i < ct ; i++ ){ Node n = nl.item(i); if( n instanceof Element ){ nodeHash.put( n.getNodeName(), n ); } } }

Заголовки и краткая версия сообщения всегда снабжаются ссылкой на полную версию. Эта ссылка встраивается в HTML-страницу с помощью методов doNewsItemHead и doNewsItemShort, как показано в листинге 8.12.

Листинг 8.12. Методы doNewsItemHead и doNewsItemShort (NewsFormatter.java)

// <Newsitem has been hashed, id is attribute private void doNewsItemHead( PrintWriter out, String id ){ out.print("<a href=" + handler + "?id=" + id + "&size=L >" ); out.print("<h3>"); out.print( nodeHash.get("head") ); out.println("</h3></a>"); out.println(); }

// <Newsitem has been hashed, id is attribute // output with <p>..</p> formatting private void doNewsItemShort( PrintWriter out, String id ){ // note anchor to full item display out.print("<a href=" + handler + "?id=" + id + "&size=L >" ); out.print("<h3>"); out.print( nodeHash.get("head") ); out.println("</h3></a>"); Element de = (Element)nodeHash.get("date"); out.print( de.getFirstChild() ); out.println("</p>"); Element ne = (Element)nodeHash.get("short"); String wrk = ne.getFirstChild().getNodeValue().trim() ; if( !(wrk.startsWith("<P") || wrk.startsWith("<p")) ){ out.print("<p>"); } out.print( wrk ); if( !(wrk.endsWith("/p>") || wrk.endsWith("/P>"))){ out.print("</p>"); } itemsCount++ ; out.println(); }




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