Xml aus Verzeichisse aund Dateien

Hallo erstmal,

Ich muss eine Xml Datei aus Verzeichnisse und deren Dateien erstellen.
Nun kommt mein Ansatz und das Problem.

Ich habe zwar geschafft die Datein in ein eine dimensionale Object [] zu packen und dann eine xml datei erstellen aber ich brauche eine 2 dimensionale object [][] , erste array fuer die verzeichnisse und die zweite array fuer die dateien, oder ich mache es komplete falsch. Gibt es eine moeglichkeit , ein path einzugeben und aus den Verzeichnissen und den Dateien eine xml Datei zu erstellen.
ich copiere hier kurz mal ein Teil des Quellcodes. Als Sring[][] klappt das aber das ist vermuetlich der Falsche Ansatz.

String[][] array = new String[][] {

{ "verzeichniss_01 ", "verzeichniss_02 " },
{ „Datei_01“ „Datei_02“}
};

for (int i = 0; i

Hallo,

angenommen das ist deine Verzeichnisstruktur

root
 |---- dir\_1
 | |----- file\_1
 | |----- file\_2
 | |----- subdir\_1
 | |------ file\_1
 | |------ file\_2
 |---- dir\_2
 |----- file\_1

was soll dann als XML rauskommen?

Gruß
Heavy

Hallo,
danke für die schnelle Antwort.
Also der xml sieht so aus, nach meinem Ansatz aber muss geändert werden (denke ich) da die Files wiederrum Informationen beinhalten.

  • File_1File_2
  • File_1File_2File_3

Da die Files noch Infos haben wollte ich die xml So aufbauen, dass die Files noch unterelemente haben.Das wäre meine Lösung.
Ist das Überhaupt richtig, wie ich es machen will.

.
.
.
blablablablablabla
.
.
.
file_01 file_02 file_01 file_02

oder hast du eine bessere Idee oder Lösungsvorschlag?
Grüsse,
johnny

Also, das Verzeichnis sieht so aus, und hat keine subdirectory
/root/directorys/directory1/aaa bbb ccc
/root/directorys/directory2/ddd
/root/directorys/directory3/eee fff

wobei die Buchstaben für die files stehen.
Ist mein xml struktur Richtig?
grüße,
johnny

Also, das Verzeichnis sieht so aus, und hat keine subdirectory
/root/directorys/directory1/aaa bbb ccc
/root/directorys/directory2/ddd
/root/directorys/directory3/eee fff

wobei die Buchstaben für die files stehen.
Ist mein xml struktur Richtig?

Das kann ich Dir nicht sagen, ich weiß ja nicht was du mit der XML Datei anstellen willst.

Auf jeden Fall scheint eine rekursive Methode, die ausgehend von einem Rootverzeichnis XML Elemente aus den darin enthaltenen Dateien und ggf. Unterverzeichnissen erstellt keine schlechte Idee zu sein. Beispielsweise so:

 Document doc = DocumentHelper.createDocument();
 File root = new File("c:/temp");
 Element rootElement = DocumentHelper.createElement("root");
 doc.setRootElement(rootElement);

 addFile(rootElement, root, 0);
 // ...


 public void addFile(Element e, File f, int position)
 {
 if(f.isDirectory())
 {
 File[] files = f.listFiles();
 Element child = DocumentHelper.createElement("Directory");
 child.addAttribute("id", f.getName());
 e.add(child);

 for(int i=0; i

Das Beispiel verwendet dom4j als XML API (http://www.dom4j.org/), falls du eine andere wird es wohl ähnliche Methoden geben. In der Nummerierung der Elementnamen sehe ich persönlich keinen Sinn, aber wie gesagt, **Du** solltest wissen was du mit der Datei machen willst und wie sie aussehen sollte.

HTH
Heavy

Hallo,
Danke für deine Antwort.
Ich werde das ausprobieren.
Also ich muss eine xml Datei erstellen, die mir den Inhalt( die Informationen) der dateien speichert. Meine Aufgabe ist es ein Interface zu schreiben, womit die dateien und die zugehörigen Informationen auf ein Browser visualisiert werden. (werde warscheinlich den Tomcat server dazu benutzen). Deshalb brauche ich eine xml Datei, wo ich die Daten speichere. Vielleicht habe ich hier was missverstanden und die Daten werden in die xml gespeichert und wieder geparst nachdem ich das Interface aufgebaut habe!? Aber dafür habe ich zuerst keine xml-Datei!!
Oder wäre es nicht sinnvoller zuerst die Xml-Datei zu erstellen und alle Daten reinzuspeicheren?
Grüße,
johnny.

Hallo Heavy,
ich habe mal das ausprobiert. Die klasse lässt sich ohne fehler ausführen, und die xml Datei wird auch erstellt, allerdings ohne die Directroys und die Files. Ich habe mal als test systemprintourln gemacht, nach der if und else schleifen, da habe ich die ausgaben richtig aber sie werden nicht in xml geschrieben. Hast du eine Ahnung warum? Ich denke das liegt an mein xsl Datei, die wahrscheinlich falsch aufgebaut ist?

Hier mal der code und die xsl Datei.

import java.io.File;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.dom4j.*;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

import com.sun.org.apache.bcel.internal.generic.RETURN;
import com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException.Builder;

public class CreateXml {

public static void main (String args[]){

try{

File root = new File(„c:/temp“);
//SAXBuilder builder = new SAXBuilder( false );
Document doc = DocumentHelper.createDocument();
Element rootElement = DocumentHelper.createElement(„Root“);
doc.setRootElement(rootElement);
DOMSource source = new DOMSource();

StreamResult result = new StreamResult(new File(„c:/test.xml“));
System.out.println(„xml file has been created.“);
System.out.println();

//Dokument mit XSL Stylesheet umwandeln
Transformer transformer = TransformerFactory.newInstance().newTransformer(
new StreamSource(„test.xsl“));
addFile(rootElement, root, 0);
transformer.transform( source, result);

} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerFactoryConfigurationError e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}

}

public static void addFile(Element e, File f, int position)
{

if(f.isDirectory())
{
File[] files = f.listFiles();
Element child = DocumentHelper.createElement(„Directory“);
child.addAttribute(„id“, f.getName());
e.add(child);
// System.out.println(„Hier sind die Directorys“);

for(int i=0; i This is the new created xml file

Infos about xxxxx

Eigentlich das sollte funktionieren da ich das nach einem Beispiel aus dem Buch „java ist ein insel“ gemacht habe.
Wozu braucht man diese xsl Datei? wenn ich sie weglasse, dann kommen fehler ohne Ende. Kannst du irgendwo die Fehler erkennen?

Nochmal Danke für deine Hilfe.
Grüße,
johnny

Eigentlich das sollte funktionieren da ich das nach einem
Beispiel aus dem Buch „java ist ein insel“ gemacht habe.
Wozu braucht man diese xsl Datei? wenn ich sie weglasse, dann
kommen fehler ohne Ende. Kannst du irgendwo die Fehler
erkennen?

Die XSL Transformation wandelt die XML Daten in HTML. Da scheint wohl etwas nicht ganz zu stimmen. Du kannst aber stattdessen erst mal die untransformierte Datei erzeugen:

addFile(rootElement, root, 0);
XMLWriter writer = new XMLWriter(new FileOutputStream("test.xml"), OutputFormat.createPrettyPrint());
writer.write(doc);
writer.close();

Gruß
Heavy

Hallo,
danke für deine Antwort und Hilfe.
Es hat geklappt. Ich habe (wie du meintest) xsl weggelassen und die Methoden reingepackt die du hier gepostet hast.
Hier nochmal alles, läuft wie gewollt

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

import com.sun.org.apache.bcel.internal.generic.RETURN;
import com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException.Builder;

public class CreateXml2 {

public static void main (String args[]){

try{

File root = new File(„c:/temp“);
Document doc = DocumentHelper.createDocument();
Element rootElement = DocumentHelper.createElement(„Root“);
doc.setRootElement(rootElement);
//DOMSource source = new DOMSource();
addFile(rootElement, root, 0);
XMLWriter writer = null;

try {
writer = new XMLWriter(new FileOutputStream(„test.xml“), OutputFormat.createPrettyPrint());
System.out.println();
System.out.println(„Congratulations!“);
System.out.print(„xml file has been created“);

} catch (UnsupportedEncodingException e) {
// TODO
e.printStackTrace();
} catch (FileNotFoundException e) {
System.out.println(„Check the Rootpath!“);
e.printStackTrace();
}
try {
writer.write(doc);
System.out.println(" and written under this current Project!");
} catch (IOException e) {
System.out.println("Error! ");
System.out.println("Can’t write the xml file. ");

e.printStackTrace();
}
try {
writer.close();
} catch (IOException e) {
System.out.println("Error! ");
System.out.println("Can’t write the xml file. ");
e.printStackTrace();
}
} catch (TransformerFactoryConfigurationError e) {
e.printStackTrace();
}

}

public static void addFile(Element e, File f, int position)
{

if(f.isDirectory())
{
File[] files = f.listFiles();
Element child = DocumentHelper.createElement(„Directory“);
child.addAttribute(„id“, f.getName());
e.add(child);
for(int i=0; i