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



         

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


Как показано в листинге 8.13, метод doNewsItemLong форматирует текст заголовка с помощью тега <h3>. Было бы неплохо усовершенствовать этот метод так, чтобы он допускал возможность изменять указанный формат по мере надобности. Основной текст сообщения форматируется как абзац с помощью тега <р>. Внутри самого текста могут содержаться любые форматирующие теги HTML, но теги <р> всегда будут использоваться для полного текста сообщения.

Листинг 8.13. Метод doNewsItemLong выводит полную версию сообщения (NewsFormatter.java)

// <Newsitem elements have been hashed // output long form with <p>...</p> formatting private void doNewsItemLong( PrintWriter out ){ out.print("<h3>"); out.print( nodeHash.get("head") ); out.println("</h3>"); Element de = (Element)nodeHash.get("date"); out.print( de.getFirstChild() ); out.println("</p>"); Element ne = (Element)nodeHash.get("long"); 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(); }

Наконец, в листинге 8.14 представлены два служебных метода. Метод setFor- matTempl ate отыскивает файл и считывает его строка за строкой. Предполагается, что в файле имеется строка, начинающаяся с текста "<!-INSERT". Она разделяет разметку HTML на два раздела, которые становятся переменными headStr и footStr. Метод toString предназначен для помощи в отладке.

Листинг 8.14. Конец исходного кода класса NewsFormatter (NewsFormatter.java)

private void setFromTemplate(String template ) throws IOException { File f = new File( newsFilePath, template ); FileReader fr = new FileReader( f ); BufferedReader br = new BufferedReader( fr ); StringBuffer hsb = new StringBuffer( 100 ); StringBuffer fsb = new StringBuffer( 100 ); String tmp = br.readLine(); // strips line terminators while( !tmp.startsWith("<!--INSERT" )){ hsb.append( tmp ); fsb.append("\r\n"); tmp = br.readLine(); } tmp = br.readLine(); while( tmp != null ){ fsb.append( tmp ); fsb.append("\r\n"); tmp = br.readLine(); } headStr = hsb.toString(); footStr = fsb.toString(); }

public String toString() { StringBuffer sb = new StringBuffer("NewsFormatter item ct= "); sb.append( Integer.toString( itemNodes.length )); return sb.toString() ; }

}




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