//--------------------------------------
//DOMTransformBsp.java
//1.0
//--------------------------------------

import java.io.*;
import java.util.*;       // 1

import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*; // 2
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

public class DOMTransformBsp  // 3
{
  Document doc;
  
  // ---- main ----
  public static void main (String args[])
  {
    if(args.length != 2)    // 4
    {
      System.err.println
        ("Aufruf: DOMTransformBsp01 " +
         "<dateiname> <seitenzahl>");
      System.exit(1);
    }
    new DOMTransformBsp(args);  // 5
  }

  // ---- constructor ----
  public DOMTransformBsp(String[] ar)
  {
    DocumentBuilderFactory factory =  // 6
      DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    try 
    {
      DocumentBuilder parser =  // 7
        factory.newDocumentBuilder();
      doc = parser.parse(ar[0]);  // 8
      
      updateElement(ar[1]); // 9
      xmlSchreiben();     // 10
      
    } catch (Throwable t) {
      t.printStackTrace();
    }
    System.exit(0);       // 11
  }
  
  public void updateElement // 12
    (String seitenzahl)
  {
    NodeList list =         // 13
      doc.getElementsByTagName("seiten");
    for (int x=0; x < list.getLength(); x++)  // 14
    {
      Node alterInhalt =    // 15
        list.item(x).getFirstChild();
      Text neuerInhalt =    // 16
        doc.createTextNode(seitenzahl);
      list.item(x).replaceChild // 17
        (neuerInhalt,alterInhalt);
    } 
  }
  
  public void xmlSchreiben()  // 18
  {
    TransformerFactory transFactory = // 19
      TransformerFactory.newInstance();
    try
    {
      Transformer transformer =   // 20
        transFactory.newTransformer(); 
      
      DOMSource source = new DOMSource(doc);  // 21
      
      File neuesXML = new File("newXML"+  // 22
        Calendar.getInstance(Locale.GERMANY).
        getTimeInMillis()+".xml");
      FileOutputStream output =   // 23
        new FileOutputStream(neuesXML);
      StreamResult result =   // 24
        new StreamResult(output);
      transformer.transform(source, result);  // 25
    } catch (Throwable t) {
      t.printStackTrace();
    }
  }
}
