Листинг 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(" > "); }
Затем, как показано в листинге 8.30, пишется новый тег <NewsItem> , за которым следует заголовок сообщения, указывается дата и приводятся краткая и полная версии текста сообщения. Для того чтобы записать старые элементы <NewsItan> , вызывается метод writeNewsNode. После закрытия временного файла старый файл XML удаляется, а временный файл получает имя. Следующий раз, когда этот файл будет запрошен, класс DOMIibrary по изменившейся метке даты модификации файла (timestamp) определит, что нужно считывать новый файл.