XML durchsuchen

Moin zusammen,

bräuchte einen kleinen Denkanstoß. Habe eine XML, die eine Liste von E-Mail-Adressen widerspiegelt, sprich ungefähr so:

[XML]


abc@xyz.de


[/XML]

Außerdem hab ich eine Java-Funktion, die neue Einträge in die XML-Datei einfügen kann.

Nun möchte ich, bevor ich einen neuen Eintrag hinzufüge, überprüfen, ob dieser schon in der XML vorhanden ist.

Wie gehe ich da am Besten vor?

Hi, du könntest das XML einlesen/parsen, Einträge/Emails in einem Set speichern und einfach Emails hinzufügen. Ist die Mail schon vorhanden passiert einfach nichts. Danach das XML wieder schreiben.
Wie sieht die Java Funktion denn aus?

Aktuell so:

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

// root elements
Document doc = docBuilder.parse("files/emails.xml");
Element rootElement = doc.getDocumentElement();

// email elements
Element email = doc.createElement("EMail");
rootElement.appendChild(email);

// InUse element
Element inUse = doc.createElement("InUse");
inUse.appendChild(doc.createTextNode("0"));
email.appendChild(inUse);

// address element
Element address = doc.createElement("Address");
address.appendChild(doc.createTextNode(_email.replace(" ", "")));
email.appendChild(address);

// write content in xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("files/emails.xml"));

transformer.transform(source, result);```

Dann geht doch bestimmt sowas wie

saveEmail in Set
}

//new mail
if(!set contains "neueMail") {
appendChild("neueMail")
}

Kann den ein Address Element auch ausserhalb eines E-Mail Knotens vorkommen bzw. eine solche E-Mail Adresse enthalten.
Wenn nein musst Du nur über das rootElement alle Address Elemente holen darüber iterieren und vergleichen.

Suche per XPath das Address-Element mit der neu hinzuzufügenden Emailadresse:
[xml]

eMailList/eMail/Address[text()=“abc@xyz.de”]
[/xml]
Wenn Du einen Treffer erhälst, gibt es die Email schon, ansonsten nicht und sie kann hinzugefügt werden. Wie Du auf Dein XML den XPath absetzt, hängt von dem Framework ab, dass Du verwendest.

Habs mit ner einfachen Iteration über die Liste gelöst, vielen Dank soweit :slight_smile:

Nun möchte ich, bevor ich einen neuen Eintrag hinzufüge, überprüfen, ob dieser schon in der XML vorhanden ist.

Wie gehe ich da am Besten vor???