XML Document erstellen

x-a-x

Grünschnabel
Hy,

ich beschäftige mich jetzt doch schon eine Weile mit folgendem Problem..
Ich habe einen ContactManager programmiert. Dort werden die Contacts in einer LinkedList gespeichert. Nun möchte ich alle Kontake, als xml speichern:
dazu hab ich erste eine Methode toNode() geschrieben, die ein Objekt einliest und ein Node zurückgibt.

Code:
public static Node toNode(Contact contact) {
		DocumentBuilderFactory abook = DocumentBuilderFactory.newInstance();
		DocumentBuilder docBuilder = null;
		try {
			docBuilder = abook.newDocumentBuilder();
		} catch (ParserConfigurationException e) {
			System.out.println("Error!");
		}
		Document addressbook = docBuilder.newDocument();

		Element nodeContact = addressbook.createElement("contact");
		addressbook.appendChild(nodeContact);
		
		Element phone = addressbook.createElement("phone");
		Text phoneNode = addressbook.createTextNode(contact.phone);
		phone.appendChild(phoneNode);
		nodeContact.appendChild(phone);
		Element name = addressbook.createElement("name");
		Text nameNode = addressbook.createTextNode(contact.name);
		name.appendChild(nameNode);
		nodeContact.appendChild(name);
		Element email = addressbook.createElement("email");
		Text emailNode = addressbook.createTextNode(contact.getEmail());
		email.appendChild(emailNode);
		nodeContact.appendChild(email);
		Element address = addressbook.createElement("address");
		Text addressNode = addressbook.createTextNode(contact.address);
		address.appendChild(addressNode);
		nodeContact.appendChild(address);

		//System.out.println("XML Node " + contact + " | " + nodeContact);
		
		return addressbook;
	}

Nun möchte ich alle Kontakte in ein Dokument schreiben, leider gelingt mir das nicht, da ich immer nur einen Kontakt schreibe und diesen dann immer überschreibe, d.h. in meiner xml ist immmer nur ein Kontakt.
Code:
DocumentBuilderFactory abook = DocumentBuilderFactory
							.newInstance();
					DocumentBuilder docBuilder = null;
					try {
						docBuilder = abook.newDocumentBuilder();
					} catch (ParserConfigurationException e1) {
						System.out.println("Error!");
					}
					xmlElements = new LinkedList<Element>();
					Document addressbook = docBuilder.newDocument();
					Element directory = addressbook.createElement("directory");
					addressbook.appendChild(directory);
					Node temp = null;
					for (int i = 0; i < contacts.size(); i++) {
						addressbook = (Document) Contact
								.toNode(contacts.get(i));
						// Element tmp = (Element) addressbook.getFirstChild();
						// addressbook.appendChild(temp);

						
						NodeList list = addressbook.getElementsByTagName("*");
						Element element = (Element) list.item(0);
						System.out.println(i + element.getNodeName());
						xmlElements.add(element);
					//	System.out.println(xmlElements);
						
					}
					addressbook.appendChild(xmlElements.get(0));
					DocumentWriter.write(addressbook, file);

ich weiß auch an welcher Stelle ich jedes mal überschreibe, aber ich weiß nicht was ich machen muss, damit dies nicht mehr passiert. (Anmerkung: DocumentWriter ist eine Methode die eine Document in ein FIle speichert.

kann mir jemand helfen und sagen, wie ich es schaffe, alle Kontakte in ein document zu schreiben?
 
Hy,

ja wenn Interesse besteht, erläutere ich gerne wie ich es jetzt gemacht hab:

die toNode Methode hat soweit gepasst, aber ich hab sie etwas abgeändert. Und zwar zu toNode(), sodass ich nicht immer den Kontakt übergeben muss, sondern einen Kontakt in der anderen Klasse hab und mit diesem die Methode aufruf (z.B. contact.get(0).toNode() d.h. hier hol ich mir den ersten Kontakt aus einer LinkedListe und rufe mit diesem die Methode toNode() auf).

bei der XML:

an diesem Punkt überschreib ich jedes mal die xml (addressboo) mit dem i-ten Kontakt, das heißt am Ende ist nur der letzte Kontakt der Schleife in der xml
Code:
addressbook = (Document) Contact.toNode(contacts.get(i));

Das heißt ich muss die Contacte immer mit appendChild(...) anfügen. Dies hat aber bei mir mit folgendem Code (wurde auskommentiert) auch nicht geklappt:
Code:
// addressbook.appendChild(temp);

Ich habe jetzt ein neues Element in der xml erstellt und füge daran die Contact an.
Ich lass die Schleife über die ganze LinkedList laufen (in der meine Kontakte abgespeichert sind) und hole mir für jeden Eintrage mit importNode(...) die Node (die mit toNode()) erstellt wird, zurückgeben. Diese Node häng ich dann an das directory-Element mit directory.appendChild(...)
Nach dem die Schleife durchlaufen ist, häng ich das directory-Element an die xml mit addressbook.appendChild(directory). Somit sind alle Kontakte in der xml. und ich kann das Adressbuch mit der Methedo DocumentWriter erstellen.

Hier der Code dazu:
Code:
Element directory = addressbook.createElement("directory");
//Schleife die Contacte an directory anfügt
for (int i = 0; i < contacts.size(); i++) {
directory.appendChild(addressbook.importNode(contacts.get(i).toNode(), true));
}
addressbook.appendChild(directory);
DocumentWriter.write(addressbook, file);

Im Nachhinein wars also mal wieder doch ned so schwer...
 

Neue Beiträge

Zurück