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



         

Класс NewsUpKeep - часть 2


В листинге 8.28 показаны некоторые вспомогательные методы, необходимые в классе NewsUpKeep. Метод formatTopics гарантирует, что строка, которая будет записана в качестве значения атрибута topic, имеет правильный формат.

Листинг 8.28. Различные вспомогательные функции класса NewsUpKeep (NewsUpKeep.java)

//ensure there are no leading or trailing spaces on the // individual topics, comma separated, general,food , etc private String formatTopics(String s ){ if( s.indexOf(',') < 0 ) return s.trim(); // only separator is comma StringTokenizer st = new StringTokenizer( s, "," ); StringBuffer sb = new StringBuffer( s.length() ); while( st.hasMoreTokens() ){ sb.append( st.nextToken().trim() ); if( st.hasMoreTokens() ) sb.append(','); } return sb.toString(); } // convert system millisecs to days since epoch private String timeInDays(){ long t = System.currentTimeMillis() ; int tid = (int)(t / ( 1000 * 60 * 60 * 24 )); return Integer.toString( tid ); }

// s expected to be decimal number used in <Newsitem id= private String incrementID(String s ){ try{ int n = Integer.parseInt( s ); return Integer.toString( n + 2 ); }catch(NumberFormatException e){ return s + "a" ; } } public String toString() { StringBuffer sb = new StringBuffer("NewsUpkeep "); sb.append(" Newsitem count: " ); sb.append( Integer.toString( itemNodes.length )); return sb.toString(); }

Теперь мы подходим к основному рабочему методу, addltem. Сначала этот метод создает новый файл с временным именем и записывает туда стандартное объявление XML и комментарии. Затем создается тег <Newsfile>, куда записываются имена атрибутов и их значения из коллекции rootNNM.

Как видно из листинга 8.29, атрибут nextid обрабатывается специальным образом. Сохраняется текущее значение, которое становится значением атрибута id нового элемента <Newsitem>, а увеличенное значение записывается в тег <Newsfile>.

Листинг 8.29. Начало метода addltem (NewsUpKeep.java)

// items are always added at the top of the file // so we have to rebuild the start of the root element public void addItem( String head, String date, String topics, String author, String shrtStr, String longStr ) throws IOException { String idVal = "" ; String tmpfile = newsFileName + "$$" ; File f = new File( tmpfile ); FileWriter fw = new FileWriter(f); PrintWriter out = new PrintWriter( new BufferedWriter( fw ) ); out.println("<?xml version=\"1.0\" standalone=\"yes\" ?>"); out.println("<!-- output by NewsUpkeep -->"); int ct = rootNNM.getLength(); if( ct == 0 ){ out.println("<Newsfile>"); } else { out.print("<Newsfile "); for( int i = 0 ; i < ct ; i++ ){ Node an = rootNNM.item(i); String name = an.getNodeName(); String val = an.getNodeValue(); out.print( name + "=\"" ); if( name.equals("nextid") ){ idVal = val ; val = incrementID( val ); } out.print( val + "\" "); } out.println(" >"); }




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