Hey Leute, ^^
ich habe eine GAEB-XML Datei die ich in Java parsen muss.
Eine GAEB-Datei hat Positionen, welche eine Leistung beschreibt und gehört zu einem Titel, wobei jede
Titel zu einem Gewerk gehört. Die Leistungsverzeichnis beinhaltet dabei alle Gewerke. (Die Struktur hänge ich noch im Anhang ran).
Ich habe versucht mit JAXB zu parsen, jedoch gefiel mir die Struktur dabei nicht und bin damit eben nicht klar gekommen. Deshalb stieß ich auf den DOM-Parser.
Meine Frage wäre, ob es möglich ist im DOM-Parser auf Elemente in einem Element zugreifen kann und wenn ja wie dies aussehen würde.
Ich habe nämlich Gewerke die alle eine unterschiedliche Anzahl an Leistungen bzw. Titel enthalten, dabei wollte ich eine Methode, dass wenn ein Gewerk bereits all seine
Leistungen enthält, dass ein neues Gewerk seine zugehörigen Leistungen erhält.
Soweit bin ich gekommen, weiter konnte ich leider nicht kommen. Da ich nicht weiß, wie es möglich es, dass man zeigt, dass jetzt ein neues Gewerk kommen muss.
Falls es wichtig ist: im Prinzip brauche ich nur die Tags für BoQCtgy, RNoPart, Itemlist bzw. Item, sowie TextOutlTxt, Qty, QU und LblTx
mein restlicher Code:
ich habe eine GAEB-XML Datei die ich in Java parsen muss.
Eine GAEB-Datei hat Positionen, welche eine Leistung beschreibt und gehört zu einem Titel, wobei jede
Titel zu einem Gewerk gehört. Die Leistungsverzeichnis beinhaltet dabei alle Gewerke. (Die Struktur hänge ich noch im Anhang ran).
Ich habe versucht mit JAXB zu parsen, jedoch gefiel mir die Struktur dabei nicht und bin damit eben nicht klar gekommen. Deshalb stieß ich auf den DOM-Parser.
Meine Frage wäre, ob es möglich ist im DOM-Parser auf Elemente in einem Element zugreifen kann und wenn ja wie dies aussehen würde.
Ich habe nämlich Gewerke die alle eine unterschiedliche Anzahl an Leistungen bzw. Titel enthalten, dabei wollte ich eine Methode, dass wenn ein Gewerk bereits all seine
Leistungen enthält, dass ein neues Gewerk seine zugehörigen Leistungen erhält.
Soweit bin ich gekommen, weiter konnte ich leider nicht kommen. Da ich nicht weiß, wie es möglich es, dass man zeigt, dass jetzt ein neues Gewerk kommen muss.
Falls es wichtig ist: im Prinzip brauche ich nur die Tags für BoQCtgy, RNoPart, Itemlist bzw. Item, sowie TextOutlTxt, Qty, QU und LblTx
Java:
public static List<Item> itemZuordnen() {
for (int i = 0; i < nItemList.getLength(); i++) {
Element uuk = (Element) nItemList.item(i);
String oz = uuk.getAttribute("RNoPart"); //Ordinalzahl
String menge = uuk.getElementsByTagName("Qty").item(0).getTextContent(); //Menge
String einheit = uuk.getElementsByTagName("QU").item(0).getTextContent(); //Einheit
String kurztext = uuk.getElementsByTagName("TextOutlTxt").item(0).getTextContent(); //Beschreibung der Leistung
Item item = new Item(oz, menge, einheit, kurztext);
arr.add(item);
}
System.out.println(arr);
return arr;
}
}
mein restlicher Code:
Java:
public class DomParser {
static DocumentBuilderFactory factory;
static DocumentBuilder builder;
static Document document;
static Element eGewerk;
static Oberkategorie gewerk;
static Unterkategorie titel1;
static Unterkategorie titel2;
static NodeList nGewerkUndTitel;
static NodeList nItemList;
static List<Item> arr = new ArrayList<Item>();
public static void main(String[] args)
throws ParserConfigurationException, SAXException, IOException, ParseException {
initDoc();
System.out.println("OZ MENGE EINHEIT KURZTEXT");
initialisieren();
}
public static void initialisieren() {
String[] gewerkName = new String[9];
nGewerkUndTitel = document.getElementsByTagName("BoQCtgy");
nItemList = document.getElementsByTagName("Item");
for (int i = 0; i < nGewerkUndTitel.getLength(); i++) {
if (i % 3 == 0) {
eGewerk = (Element) nGewerkUndTitel.item(i);
Element eTitel = (Element) nGewerkUndTitel.item(1);
Element eTitel2 = (Element) nGewerkUndTitel.item(2);
titel1 = new Unterkategorie(eTitel.getAttribute("RNoPart"),
eGewerk.getElementsByTagName("LblTx").item(1).getTextContent(), null); //Hier wird ein Titel erstellt mit der entsprechenden //Ordinalzahl (OZ) und Beschreibung(Kurztext)
titel2 = new Unterkategorie(eTitel2.getAttribute("RNoPart"),
eGewerk.getElementsByTagName("LblTx").item(2).getTextContent(), null);
gewerkName[i] = eGewerk.getElementsByTagName("LblTx").item(0).getTextContent();
gewerk = new Oberkategorie(eGewerk.getAttribute("RNoPart"), gewerkName[i], titel1, titel2); //Hier wird das Gewerk erstellt mit der //entsprechenden Ordinalzahl, Kurztext sowie seine zwei Titel
System.out.println(gewerk.toString());
}
}
}