/**
* Diese Methode macht aus einer gegebenen XML Datei und werten aus einer
* Hastabelle sowie einer Knotenpunktüberschrifft eine große XML in der die
* neuen Werte unter dem übergebenen Knotenpunkt gesammelt sind!
*
* @param file1 Absoluter Pfad der XML in der am Ende alle Daten liegen
* sollen
* @param table1 Die Hashtable mit den Informationen die in den neuen
* Knotenpunkt sollen
* @param knotenname Der Name des neun Knotens unter dem die Infos der Hashtable
* gespeichert werden sollte dieser null sein so wird kein neuer Knoten
* erzeugt sondern die Daten so geschrieben.
* @param position Sagt !!! vor!!! also wenn es zu Tarifdaten soll z.B. dann gehört hier
* </Tarifdaten> hin nicht <Tarifdaten> welchem String die in der Hash
* Table enthaltenen
* Werte eingefügt werden sollen! Sonderfunktion mit "start" "end"
* kann am Anfang oder Ende der Datei eigefügt werden. wenn der Parameter "neu"
* übergeben wird wird eine neue Datei mit den werten angelegt.
*/
/*
* Beispielaufrufe:
* schreibeXML ("C:\\DAten\\datei.xml",Hashtable , null , "start" )
* dieser Aufruf setzt die in der Hashtable befindlichen Werte an den Anfang der
* Datei unter das <XML>
*
* schreibeXML ("C:\\DAten\\datei.xml",Hashtable , null , "end" )
* dieser Aufruf setzt die werte der Tabelle an das Ende der Datei auch
* ohne Knotenpunkt
*
* schreibeXML ("C:\\DAten\\datei.xml",Hashtable , "Knoten" , "start" )
* schreibt die werte der Tabelle an den Anfang der Datei unter <xml> unter dem
* Knotenpunkt Knoten
*
* schreibeXML ("C:\\DAten\\datei.xml",Hashtable , "Knoten" , "end" )
* schreibt die daten der Tabelle an das Ende der Datei unter dem Knotenpunkt Knoten
*
* diese Methode wurde erstellt von TRunKX
*/
public void schreibeXML(String file1, Hashtable table1, String knotenname,
String position)
{
// benötigte Variablen
String gelesen;
String fertig = "";
String textfile2 = "";
boolean planted = false;
boolean writeafter = false;
boolean alsKnoten = true;
boolean neu = false ;
if(knotenname == null)
{
alsKnoten = false;
}
if(position.equals("start"))
{
writeafter = true;
position = "<xml>";
}
else if(position.equals("end"))
{
writeafter = false;
position = "</xml>";
}
else if (position.equals("neu"))
{
//die alte conf wird gelöscht!
File dir = new File(file1);
dir.delete();
position = "neu";
neu = true;
}
try
{
if (neu)
{
PrintWriter pwoutD = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(file1, true))));
pwoutD.println(" neu");
pwoutD.close();
}
//XML öffnen und bis zu dem Punkt auslesen wo das neue eingefügt werden soll
try
{
InputStreamReader input = new InputStreamReader(new FileInputStream(file1));
BufferedReader br = new BufferedReader(input);
}
catch (FileNotFoundException e)
{
}
//Die Hash Table sortieren
Iterator keys = table1.keySet().iterator();
Iterator values = table1.values().iterator();
String textfile1="";
if ( neu )
{
textfile1 = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<xml>";
}
//Schleife die den Inhalt der Hashtable in die Vartiable xml Style schreibt
while(keys.hasNext() && values.hasNext())
{
// kleiner Teil der das ganze nach XML aussehen lässt
gelesen = " <" + keys.next().toString() + " value=\""
+ values.next().toString() + "\"/>\n";
textfile2 = textfile2 + "\n" + gelesen;
gelesen = "";
}
gelesen = "";
while(true)
{
//auslesen der dAtei
gelesen = br.readLine();
//am Ende wird das neue eingefügt und das end manuell neu geschrieben!
if((gelesen != null) && gelesen.endsWith(position) && (planted == false))
{
//sollte unsere Sprungmarke für den eingriff erreicht sein
//wird geprüft ob nach <xml> oder vor </xml> geschrieben wird
//und ob wir einen Knotenpunkt haben oder nicht!
//Je nach Faktoren wird dann entsprechend geschrieben
if(writeafter == true)
{
if(alsKnoten)
{
fertig = textfile1 + fertig + gelesen + "\n" + "<" + knotenname + ">"
+ textfile2 + "\n" + "</" + knotenname + ">" + "\n";
}
else
{
fertig = textfile1 + fertig + gelesen + "\n" + textfile2 + "\n";
}
gelesen = "";
}
else
{
if(alsKnoten)
{
fertig =textfile1 + fertig + "\n" + "<" + knotenname + ">" + textfile2
+ "\n" + "</" + knotenname + ">";
if (neu)
{
fertig = fertig + "\n </xml>";
}
else
{
fertig = fertig + "\n" + gelesen;
gelesen = "";
}
}
else
{
fertig = textfile1 + fertig + "\n" + textfile2 ;
if (neu)
{
fertig = fertig + "\n </xml>";
}
else
{
fertig = fertig + "\n" + gelesen;
gelesen = "";
}
}
gelesen = "";
}
planted = true;
}
//Abbruch am ende der Datei eigentlich unnötig nur falls es mal keine XML sein sollte
else if(gelesen == null)
{
break;
}
}
br.close();
}
catch(IOException e)
{
System.out.println(e);
}
BufferedReader brin = new BufferedReader(new InputStreamReader(System.in));
try
{
File dir = new File(file1);
dir.delete();
//und in die neue wird der alte + neue Inhalt geschrieben
PrintWriter pwoutD = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(file1, true))));
StringTokenizer st = new StringTokenizer(fertig, "\n");
while(st.hasMoreTokens())
{
pwoutD.println(st.nextToken());
}
//Datei wird geschlossen
pwoutD.close();
}
catch(IOException e)
{
System.out.println(e);
}
}
}