JDOM Element löschen

ratze79

Mitglied
Hallo!

Ich habe eine XML-Datei in der ich bestimmte Elemente löschen möchte. Hier erstmal die XML:
Code:
<userData>
  <user id="7">
    <name>d</name>
    <pass>NWoZK3kTsExUV00Ywo1G5jlUKKs=</pass>
  </user>
  <user id="8">
    <name>q</name>
    <pass>NWoZK3kTsExUV00Ywo1G5jlUKKs=</pass>
  </user>
  <user id="9">
    <name>w</name>
    <pass>NWoZK3kTsExUV00Ywo1G5jlUKKs=</pass>
  </user>
</userData>

Ich möchte jetzt z. B. den User mit der id 8 komplett mit allen Unterelementen löschen. Ich schaffe es alle Unterelemente zu löschen mit:

Code:
if(id_counter == tmpUser.getID())
		{
		  entityElement.removeChild("name");
		  entityElement.removeChild("pass");
		}

Leider bleibt dann das Elemente User als leeres Element übrig.

Eine andere Möglichkeit die ich ausprobiert habe ist direkt vom Root aus das Element zu löschen, mit dem Problem das ich nur den ersten User löschen kann und nicht den, den ich gerne hätte:

Code:
if(id_counter == tmpUser.getID())
		{
		  UserData.removeChild("user");
		}

Es schein so als ob der Iterator nicht auf dem richtigen Element steht.
Kann man den Iterator auf ein bestimmtes Element setzten? Oder gibt es eine andere Möglichkeit.

Danke im Voraus.

Gruß Ratze
 
Ich nehme an Du verwendest JDOM?
Eine Möglich das zu machen wäre dann (aus dem Kopf)
Java:
Element userData; // zeigt bereits auf den <userdata> Knoten
List<Element> users = userData.getChildren("user");
for(Element user : users) {
  if(user.getAttribute("id").equalsignoreCase("8")) {
    userData.removeContent(user);
  }
}
 
Mit deiner Lösung komme ich leider noch nicht weiter. Ich habe aber in einem Buch einen Ansatz gefunden und ihn mal umgesetzt:

Code:
Document doc = new Document();
Element root = new Element("userData");
doc.setRootElement(root);
Iterator it;
Element UserData;
SAXBuilder sxbuild = new SAXBuilder();
InputSource is = new InputSource(filename);
							
	try 
	{
		
		doc = sxbuild.build(is);
		Content test = doc.getRootElement().removeContent(1);
		List li = doc.getRootElement().getContent();
		it = li.iterator();

        } 
	catch (IOException e) 
        {
		e.printStackTrace();
		return;
	}   
	catch (JDOMException e) 
	{
		e.printStackTrace();
		return;
	}

Damit löscht er das erste Child-Element nach dem Root, z. B. User 7.

Man soll laut Buch über "Content test = doc.getRootElement().removeContent(1);" das zu löschende Element auswählen können. In dem Buchbsp. ist es removeContent(0); um das erste zu löschen, da passiert leider nichts. Bei (1) löscht er bei mir wirklich das erste Element, wenn ich allerdings (2) (3) usw. auswähle passiert nichts.
 
Zurück