Hallo,
ich sitze schon einen ganzen Tag an dieser Aufgabe und komme einfach nicht mehr weiter.
Hier die Aufgabe:
Erstellen sie ein Java Programm zur Verwaltung der in XML gespeicherten Kontaktdaten. Das Programm soll folgende Funktionalitäten enthalten:
1: Lesen sie das in einem XML-Dokument gespeicherte Adressbuch (adressen2.xml) mit dem DOM Parser ein.
2:Schreiben Sie eine Methode public ArrayList<String> getAlleNamen(). Die Methode liest alle Namen aus der XML-Datei und speichert die Verkettung von Vor- und Nachname in eine ArrayList und gibt diese als Rückgabewert zurück.
3:Schreiben Sie eine Methode
public ArrayList<Kontakt> getAdressenDaten(String vorname, String nachname). Die Methode liefert eine Liste von Kontakt-Objekten die mit den übergebenen Parametern übereinstimmen.
Gegeben ist die Klasse Kontakt.java und adressen2.xml
Hier noch meine Anfänge:
Ich bin auch schon völlig irritiert, was diesen DOM Parser betrifft.
Kann man wie gefordert auf die ausgelesenen Daten der XML erneut zugreifen ohne alles wieder aufzurufen? Ich habe nur versucht mich da durchzuhangeln, aber alle google Sachen haben mir die Frage nicht beantworten können.
Im Grunde weiss ich nicht wie ich damit richtig umgehen soll und ob ich die Aufgabe richtig verstehe.
Wie lese ich für 1: alle XML Daten-Knoten samt Inhalt aus. Stimmt das, was ich in der Main gemacht habe so?
Zu 2: Hier soll ich doch die Namen aus Vorname + Nachname in einer ArrayList speichern.
Zu 3: Hier soll ich vermutlich die ArrayList mit den restlichen Adressdaten in einer anderen Liste abspeichern, aber sicher bin ich mir da nicht!?! Was meint ihr?
Vor allem wozu brauche ich nun diese Kontakt.java
Bitte helft mir! Ich bin am Verzweifeln!
Viele Grüße,
felia
ich sitze schon einen ganzen Tag an dieser Aufgabe und komme einfach nicht mehr weiter.
Hier die Aufgabe:
Erstellen sie ein Java Programm zur Verwaltung der in XML gespeicherten Kontaktdaten. Das Programm soll folgende Funktionalitäten enthalten:
1: Lesen sie das in einem XML-Dokument gespeicherte Adressbuch (adressen2.xml) mit dem DOM Parser ein.
2:Schreiben Sie eine Methode public ArrayList<String> getAlleNamen(). Die Methode liest alle Namen aus der XML-Datei und speichert die Verkettung von Vor- und Nachname in eine ArrayList und gibt diese als Rückgabewert zurück.
3:Schreiben Sie eine Methode
public ArrayList<Kontakt> getAdressenDaten(String vorname, String nachname). Die Methode liefert eine Liste von Kontakt-Objekten die mit den übergebenen Parametern übereinstimmen.
Gegeben ist die Klasse Kontakt.java und adressen2.xml
Java:
public class Kontakt {
public static enum KontaktTyp {
privat, geschaeftlich
}
private String id;
private KontaktTyp typ;
private String Nachname;
private String vorname;
private String strasse;
private String plz;
private String ort;
private String land;
public Kontakt(String pId, KontaktTyp pTyp, String pNachname,
String pVorname, String pStrasse, String pPlz, String pOrt,
String pLand) {
setId(pId);
setTyp(pTyp);
setNachname(pNachname);
setVorname(pVorname);
setStrasse(pStrasse);
setPlz(pPlz);
setOrt(pOrt);
setLand(pLand);
}
public Kontakt(KontaktTyp pTyp, String pNachname, String pVorname,
String pStrasse, String pPlz, String pOrt, String pLand) {
this(null, pTyp, pNachname, pVorname, pStrasse, pPlz, pOrt, pLand);
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public KontaktTyp getTyp() {
return typ;
}
public void setTyp(KontaktTyp typ) {
this.typ = typ;
}
public String getNachname() {
return Nachname;
}
public void setNachname(String name) {
this.Nachname = name;
}
public String getVorname() {
return vorname;
}
public void setVorname(String vorname) {
this.vorname = vorname;
}
public String getStrasse() {
return strasse;
}
public void setStrasse(String strasse) {
this.strasse = strasse;
}
public String getPlz() {
return plz;
}
public void setPlz(String plz) {
this.plz = plz;
}
public String getLand() {
return land;
}
public void setLand(String land) {
this.land = land;
}
public String getOrt() {
return ort;
}
public void setOrt(String ort) {
this.ort = ort;
}
}
Java:
<?xml version="1.0" ?>
- <Adressbuch>
- <Kontakt typ="privat">
- <Name>
<Vorname>Max</Vorname>
<Nachname>Mustermann</Nachname>
</Name>
- <Adresse>
<Strasse>Musterstrasse 10</Strasse>
<PLZ>10199</PLZ>
<Ort>Berlin</Ort>
<Land>Deutschland</Land>
</Adresse>
</Kontakt>
- <Kontakt typ="privat">
- <Name>
<Vorname>Sandra</Vorname>
<Nachname>Tester</Nachname>
</Name>
+ <Adresse>
<Strasse>Stallvagen 3</Strasse>
<PLZ>35761</PLZ>
<Ort>Alvesta</Ort>
<Land>Schweden</Land>
</Adresse>
</Kontakt>
- <Kontakt typ="privat">
- <Name>
<Vorname>Karl</Vorname>
<Nachname>Leister</Nachname>
</Name>
- <Adresse>
<Strasse>Hauptstrasse 3</Strasse>
<PLZ>03572</PLZ>
<Ort>Dresden</Ort>
<Land>Deutschland</Land>
</Adresse>
</Kontakt>
- <Kontakt typ="geschaeftlich">
- <Name>
<Vorname>Bernd</Vorname>
<Nachname>Business</Nachname>
</Name>
- <Adresse>
<Strasse>Neuer Weg 30</Strasse>
<PLZ>12055</PLZ>
<Ort>Berlin</Ort>
<Land>Deutschland</Land>
</Adresse>
</Kontakt>
- <Kontakt typ="geschaeftlich">
- <Name>
<Vorname>Moritz</Vorname>
<Nachname>Makler</Nachname>
</Name>
- <Adresse>
<Strasse>Lindenstrasse 3</Strasse>
<PLZ>54762</PLZ>
<Ort>Frankfurt am Main</Ort>
<Land>Deutschland</Land>
</Adresse>
</Kontakt>
</Adressbuch>
Hier noch meine Anfänge:
Java:
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.util.ArrayList;
/**
*
*
*
*/
public class XMLAdressbuch {
// Pfad und Name der XML Datei die ausgegeben werden soll
private static String XMLDateiName = "./src/adressen2.xml";
private static String vorname, nachname;
// XML Werte Konstanten
private static ArrayList<String> liste;
private static ArrayList<Kontakt> liste2;
/**
* Main Methode.
*
* @param args
* ohne
*/
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
// Uebergebene XML-Datei parsen
Document dokument = builder.parse(new File(XMLDateiName));
// Wurzelelement Adressbuch holen
Element abuchElement = dokument.getDocumentElement();
getAlleNamen(dokument);
getAdressenDaten(vorname, nachname, dokument);
// DOM Baum durchlaufen und ausgeben
traversieren(dokument.getDocumentElement(), "");
}
/**
* Methode zum Durchlaufen und Ausgeben des DOM Baums.
*
* @param e aktuelles Element
* @param ebene String für die Einrueckung der Ebenen
*/
private static void traversieren(Element e, String ebene) {
System.out.println(ebene + e.getNodeName());
// Kindelemente des uebergebenen Elements ermitteln
NodeList children = e.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node knoten = children.item(i);
// Knoten ist ein ELEMENT_NODE
if (knoten.getNodeType() == Node.ELEMENT_NODE)
// Rekursiver Aufruf von traversieren für aktuelles Element
traversieren((Element) knoten, ebene + " ");
// Knoten ist ein TEXT_NODE
else if (knoten.getNodeType() == Node.TEXT_NODE) {
String inhalt = knoten.getTextContent();
if (inhalt.trim().length() > 0) // leerer Inhalt?
System.out.println(ebene + " :" + inhalt);
} else
// kein ELEMENT_NODE, kein TEXT_NODE
System.out.println(ebene + knoten);
}
}
public static ArrayList<String> getAlleNamen(Document dokument){
// Alle Kindelemente mit dem Namen Vornamen einsammeln
NodeList kontaktNodes = dokument.getElementsByTagName("Kontakt");
liste = new ArrayList<String>(kontaktNodes.getLength());
for (int i=0; i<kontaktNodes.getLength(); i++) {
// Node nach Element casten
Element kontaktElement = (Element) kontaktNodes.item(i);
// Neue Instanz von Person anlegen
Kontakt person = new Kontakt(null, XMLDateiName, XMLDateiName, XMLDateiName, XMLDateiName, XMLDateiName, XMLDateiName);
// Kindelemente Vorname suchen, den Textinhalt als Vorname nehmen
NodeList node1 = kontaktElement.getElementsByTagName("Vorname");
person.setVorname(node1.item(0).getTextContent());
// Analog für nachname
NodeList node2 = kontaktElement.getElementsByTagName("Nachname");
person.setNachname(node2.item(0).getTextContent());
vorname=person.getVorname();
nachname=person.getNachname();
liste.add(vorname+" "+nachname);
}
// Kontroll Ausgabe der Liste auf der Konsole
System.out.println("*** Alle Namen ***");
System.out.println(liste);
return liste;
}
public static ArrayList<Kontakt> getAdressenDaten(String vorname, String nachname, Document children){
// Alle Kindelemente mit dem Namen Vornamen einsammeln
liste2 = new ArrayList<Kontakt>(liste.size());
for (int i=0; i<liste.size(); i++) {
// Neue Instanz von Person anlegen
Kontakt person = new Kontakt(null, pNachname, XMLDateiName, XMLDateiName, XMLDateiName, XMLDateiName, XMLDateiName);
// Kindelemente Vorname suchen, den Textinhalt als Vorname nehmen
System.out.print(person.getStrasse());
}
return liste2;
}}
Ich bin auch schon völlig irritiert, was diesen DOM Parser betrifft.
Kann man wie gefordert auf die ausgelesenen Daten der XML erneut zugreifen ohne alles wieder aufzurufen? Ich habe nur versucht mich da durchzuhangeln, aber alle google Sachen haben mir die Frage nicht beantworten können.
Im Grunde weiss ich nicht wie ich damit richtig umgehen soll und ob ich die Aufgabe richtig verstehe.
Wie lese ich für 1: alle XML Daten-Knoten samt Inhalt aus. Stimmt das, was ich in der Main gemacht habe so?
Zu 2: Hier soll ich doch die Namen aus Vorname + Nachname in einer ArrayList speichern.
Zu 3: Hier soll ich vermutlich die ArrayList mit den restlichen Adressdaten in einer anderen Liste abspeichern, aber sicher bin ich mir da nicht!?! Was meint ihr?
Vor allem wozu brauche ich nun diese Kontakt.java
Bitte helft mir! Ich bin am Verzweifeln!
Viele Grüße,
felia