Konkatenation von XML-Files

Status
Nicht offen für weitere Antworten.

oschli

Mitglied
Hi,

ich erzeuge auf einem Linux Rechner eine XML-Datei. Durch logrotate wird sichergestellt das die Dateien nicht zu groß werden. Die alten Dateien werden hochgezählt und eine neue log.xml erstellt. Folglich hat log1.xml den run 1-3 und log.xml run 4-6.


log1.xml
Code:
<Logfile>
   <run>1</run>
   <run>2</run>
   <run>3</run>
</Logfile>


log.xml
Code:
<Logfile>
   <run>4</run>
   <run>5</run>
   <run>6</run>
</Logfile>
Es kann davon ausgegangen weden, dass mindestens die Datei log.xml vorhanden ist.

Jetzt würde ich gerne die Dateien auswerten. Dazu müßte ich alle Dateien in eine Datei schreiben und diese weiterverarbeiten.

Wie könnte ich das machen?
 

Bleiglanz

Gesperrter Benutzer
warum musst du die alle in eine neue Datei schreiben?

nimm halt SAX und parse die Dateien nacheinander??
 

oschli

Mitglied
Da jedes <run> Element ein Datum enthält war mein erster Gedanke, die Dateien in einer Datei zuordnen, bevor ich diese dann auswerte.

Hab bis jetzt leider noch nichts mit SAX gemacht. Werde mich da heute abend mal ein bißchen schlauer machen.
 

oschli

Mitglied
Hi,

hier mal mein erster Versuch. Der hat allerdings noch ziemliche macken. Außerdem heißen die Logfiles jetzt:

log0.xml "zeitlich das neuste"
log1.xml
log2.xml "zeitlich das älteste"
usw.

Damit die Datei gültig wird mußte ich ein neuese root Element (Konkat) schreiben, wie könnte ich das umgehen?
Code:
public void checkIfFilesExist(String directory)throws NoFile, FileNotFoundException{
		
                concatFile_ =new File(direcotory+"/concat.xml");
		
		myDirectory_=new File(directory);
		dirList_=myDirectory_.listFiles();
				
		FileOutputStream fOStream = new FileOutputStream (concatFile_);
		PrintWriter pWriter = new PrintWriter (fOStream);
		pWriter.println("<Konkat>");
		for (int i=dirList_.length-1;i>=0;i--){
		   System.out.println(i);
		   System.out.println(dirList_[i]);
		   try {
			   FileReader fReader = new FileReader(dirList_[i]);
			   BufferedReader bReader = new BufferedReader(fReader);
			   
			   try {
				   String line;
				   while((line=bReader.readLine())!=null){
					   System.out.println(line);
					   pWriter.println(line);
				   }
				   bReader.close();
				  
				   
			   } 
			   catch (IOException e) {
				   e.printStackTrace();
			   }
		   } 
		   catch (FileNotFoundException e) {
			   e.printStackTrace();
		   }
		}
		pWriter.println("</Konkat>");
		pWriter.close();
		if(!concatFile_.exists()){
			throw new NoFile();
		}
	}

concat.xml
Code:
<Konkat>
  <Logfile>
     <Run>1</Run>
     <Run>2</Run>
     <Run>3</Run>
  </Logfile>
  <Logfile>
      <Run>4</Run>
      <Run>5</Run>
      <Run>6</Run>
  </Logfile>
  <Logfile>
      <Run>7</Run>
      <Run>8</Run>
      <Run>9</Run>
  </Logfile>
</Konkat>
 

mic_checker

Top Contributor
Du machst es ja bisher auf konventionellem Weg über das IO Package, aber du brauchst doch gar nicht eine große Datei...so wie ich das sehe.
Du willst lediglich die Einträge in diversen Log-Dateien auswerten. Dafür kannst du wie Bleiglanz bereits geschrieben hat SAX verwenden. Dann parst du einfach nacheinander die entsprechenden Dateien mit SAX, außer es besteht ein guter Grund dafür die zuerst in eine Datei zu schreiben.

Schau dir einfach mal SAX an, hier im Forum findest du sicher einige Beiträge , heisst nicht umsonst Simple API for XML access :)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben