Hallo zusammen!
Da dies mein erster Post hier ist und ich erst seit 3 Wochen Java e, bitte ich um Nachsicht, wenn ich Formationsfehler mache, oder mich n bissl Laienhaft und evtl. unverständlich Ausdrücke.
Ich will/muss einen Parser schreiben, der mir aus *.java Files einen Tree erzeugt.
Das Parsen der Files geht hervorragend, auch die Rekursion macht das, was ich will ...
ABER: sobald ich die Daten via JDOM in eine XML-File schreiben will, fangen meine Probleme an.
Ich versuch zu erklären, wie meine Struktur auszusehen hat:
Diese XML-File hab ich allerdings mit Hand erstellt, so sollte es Final aussehen!
Die jetzige XML-File sieht so aus:
Wie man hoffentlich sieht, haben die psfs, die zu den "BCs" gehören, noch BO-Partner als Parent.
Und hier meine Frage:
Wie bekomm ich die "BCs" als Parent?
Hier mein Code (schlimm und chaotisch, sry):
Und hier die Main:
Ich hoffe inständig, das mir wer helfen kann, denn ich verzweifel grad n bissl
schonmal danke im vorraus
Alex aka NapaZero
Da dies mein erster Post hier ist und ich erst seit 3 Wochen Java e, bitte ich um Nachsicht, wenn ich Formationsfehler mache, oder mich n bissl Laienhaft und evtl. unverständlich Ausdrücke.
Ich will/muss einen Parser schreiben, der mir aus *.java Files einen Tree erzeugt.
Das Parsen der Files geht hervorragend, auch die Rekursion macht das, was ich will ...
ABER: sobald ich die Daten via JDOM in eine XML-File schreiben will, fangen meine Probleme an.
Ich versuch zu erklären, wie meine Struktur auszusehen hat:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<wurzel>
<BO-Partner>
<psfs-Partnernr />
<psfs-Partnerart />
<psfs-Anrede />
<psfs-Vorname />
<psfs-Nachname />
<psfs-Geburtsdatum />
<psfs-Anzahl_Bankverbindung />
<psfs-Anzahl_Bankverbindung_Exkasso />
<psfs-Anzahl_Bankverbindung_Privat />
<psfs-Neuanlage_Partner />
<psfs-Neuanlage_ />
<BC-Adressdaten>
<psfs-Straße />
<psfs-Hausnummer />
<psfs-Land />
<psfs-Postleitzahl />
<psfs-Ort />
</BC-Adressdaten>
<BC-Bankverbindungen>
<psfs-Kontoart />
<psfs-Bank />
<psfs-Bankleitzahl />
<psfs-Kontonummer />
</BC-Bankverbindungen>
</BO-Partner>
<BO-Vertrag />
</wurzel>
Diese XML-File hab ich allerdings mit Hand erstellt, so sollte es Final aussehen!
Die jetzige XML-File sieht so aus:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<wurzel>
<BO-Partner>
<psfs-Partnernr />
<psfs-Partnerart />
<psfs-Anrede />
<psfs-Vorname />
<psfs-Nachname />
<psfs-Geburtsdatum />
<psfs-Anzahl_Bankverbindung />
<psfs-Anzahl_Bankverbindung_Exkasso />
<psfs-Anzahl_Bankverbindung_Privat />
<psfs-Neuanlage_Partner />
<psfs-Neuanlage_ />
<BC-Adressdaten>
<BC-Adressdaten />
sdfsdfds
</BC-Adressdaten>
<psfs-Straße />
<psfs-Hausnummer />
<psfs-Land />
<psfs-Postleitzahl />
<psfs-Ort />
<BC-Bankverbindungen>
<BC-Bankverbindungen />
sdfsdfds
</BC-Bankverbindungen>
<psfs-Kontoart />
<psfs-Bank />
<psfs-Bankleitzahl />
<psfs-Kontonummer />
</BO-Partner>
<BO-Vertrag />
</wurzel>
Wie man hoffentlich sieht, haben die psfs, die zu den "BCs" gehören, noch BO-Partner als Parent.
Und hier meine Frage:
Wie bekomm ich die "BCs" als Parent?
Hier mein Code (schlimm und chaotisch, sry):
Code:
package src;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import org.jdom.Element;
public class SaveStructureXML {
static Element root = new Element("wurzel");
Element children = null;
static Element bcchildren = null;
String aktuelleBC=null;
Element psfs1 = null;
Element psfs2 = null;
public Element getStructure(String pfade) throws IOException {
// boolean dir = true;
String aktuellerPfad = pfade;
int index = 0;
int psfsindex = 0;
int bcindex = 0;
int Elindex = 0;
String token = null;
String tokenpsfs = null;
String tokenele = null;
String eletoken = null;
FileReader file = null;
BufferedReader reader = null;
// List children = root.getChildren();
// System.out.println(children);
//
// root.addContent(new
// Element("bo").addContent("bo-psfs").addContent(new
// Element("bo-bc").addContent("bc-psfs")));//grobstruktur
File datei= new File(aktuellerPfad);
file = new FileReader(aktuellerPfad);
reader = new BufferedReader(file);
index = 0;
Elindex = 0;
psfsindex = 0;
boolean eoff = false;
boolean botrue = false;
while (!eoff) {
String line = reader.readLine();
if (line == null) {
eoff = true;
} else {
/*
* bosuche
*/
if (line.contains("@BusinessObject") && botrue==false) {
if (line.contains("(displayName=")
|| line.contains("( displayName=")) {
StringTokenizer st = new StringTokenizer(line, "\"");
while (st.hasMoreTokens()) {
index++;
token = st.nextToken();
if (index == 2) {
break;
}
}
}
root.addContent(new Element("BO-"
+ token.replace(" ", "_")));
botrue=true;
}
/*
* Elementsuche
*/
else if (line.contains("@Element") && line.contains("displayName=")) {
if (line.contains("displayName=")) {
StringTokenizer Elst = new StringTokenizer(line, "\"");
while (Elst.hasMoreTokens()) {
Elindex++;
tokenele = Elst.nextToken();
if (Elindex == 2) {
Elindex = 0;
break;
}
}// Ende Token
}// ende Token-if
System.out.println("--------------------->Anfang von BC-"+tokenele);
bcindex++;
aktuelleBC="BC-" + tokenele.replace(" ", "_");
Element ele = new Element("BC-" + tokenele.replace(" ", "_"));
Element bcele = new Element("BC-" + tokenele.replace(" ", "_"));
eletoken = tokenele.toLowerCase();
children = root.getChild("BO-Partner");
children.addContent(ele.addContent(bcele));
bcchildren = root.getChild("BO-Partner").getChild(aktuelleBC);
bcchildren.addContent("sdfsdfds");
/*
* BC-java öffnen
*/
getStructure(datei.getParent()+"\\BC"+tokenele+".java"); //rekursiver Aufruf
// System.out.println(psfs1);
}
/*
* psfssuche
*/
else if (line.contains("public static final String")) {
StringTokenizer psfsst = new StringTokenizer(line, "\"");
while (psfsst.hasMoreTokens()) {
Elindex++;
tokenpsfs = psfsst.nextToken();
if (Elindex == 2) {
Elindex = 0;
break;
}
}// Ende Token
// System.out.println(token);
System.out.println(tokenpsfs);
psfsindex++;
psfs1 = new Element("psfs-"
+ tokenpsfs.replace(" ", "_"));
psfs2 = new Element("psfs-"
+ tokenpsfs.replace(" ", "_"));
children = root.getChild("BO-Partner");
children.addContent(psfs1);
}
}
}
reader.close();
return root;
}
public List listOfPaths(String zielordner) throws IOException {
List<String> list = new ArrayList<String>();
File fil = new File(zielordner);
BufferedReader reader = null;
if (fil.isDirectory()) {
String fils[] = fil.list();
for (int i = 0; i < fils.length; ++i) {
String filtest = fils[i];
filtest = fil.getAbsolutePath();
fils[i] = filtest + "\\" + fils[i];
String test = fils[i];
FileReader file = new FileReader(test);
reader = new BufferedReader(file);
boolean eof = false;
boolean botrue2 = false;
while (!eof) {
String line = reader.readLine();
if (line == null) {
eof = true;
} else {
if (line.contains("@BusinessObject")&&botrue2==false) {
list.add(fils[i]);
botrue2=true;
}
}
}
reader.close();
}
}
return list;
}
}
Und hier die Main:
Code:
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import src.SaveStructureXML;
public class ParserTestmain {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
List list = new ArrayList();
SaveStructureXML getSourceClasses = new SaveStructureXML();
Element root=null;
XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
FileOutputStream output = new FileOutputStream(
"C:\\Dokumente und Einstellungen\\alzeitz\\Desktop\\JavaParser2.xml");
list = getSourceClasses.listOfPaths(args[0]);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
root=getSourceClasses.getStructure((String) list.get(i));
}
Document dokument = new Document(root);
outputter.output(dokument, output);
output.close();
}
}
Ich hoffe inständig, das mir wer helfen kann, denn ich verzweifel grad n bissl
schonmal danke im vorraus
Alex aka NapaZero