tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
2995
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ratze79 ratze79 ist offline Mitglied Silber
    Registriert seit
    May 2007
    Beiträge
    80
    Hallo!

    Ich habe eine XML-Datei in der ich bestimmte Elemente löschen möchte. Hier erstmal die XML:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    <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 :
    1
    2
    3
    4
    5
    
    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 :
    1
    2
    3
    4
    
    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
     

  2. #2
    Avatar von torax13
    torax13 torax13 ist offline Mitglied Gold
    Registriert seit
    Jul 2007
    Beiträge
    155
    Ich nehme an Du verwendest JDOM?
    Eine Möglich das zu machen wäre dann (aus dem Kopf)
    Code java:
    1
    2
    3
    4
    5
    6
    7
    
    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);
      }
    }
     
    Falls ich entgegen meiner Gewohnheiten mal einen hilfreichen Beitrag schreibe, freu ich mich über eine positive Bewertung.

  3. #3
    ratze79 ratze79 ist offline Mitglied Silber
    Registriert seit
    May 2007
    Beiträge
    80
    Mit deiner Lösung komme ich leider noch nicht weiter. Ich habe aber in einem Buch einen Ansatz gefunden und ihn mal umgesetzt:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
     
    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.
     

  4. #4
    Avatar von torax13
    torax13 torax13 ist offline Mitglied Gold
    Registriert seit
    Jul 2007
    Beiträge
    155
    Wo hängst Du mit meinem Ansatz? Was klappt da nicht? Wie gesagt, ich hab das so aus dem Kopf hingepinselt, könnt sein, das es da noch was Fehlt (hoffe aber nicht).

    Element.removeContent(1) ist hier [1] in der API. Leider hab ich auf nen schnellen Blick nicht entdeckt, ob index bei 0 oder bei 1 anfängt, würde aber ganz stark auf 0 tippen.

    [1] http://jdom.org/docs/apidocs/org/jdo...oveContent(int)

    Gruß
     
    Falls ich entgegen meiner Gewohnheiten mal einen hilfreichen Beitrag schreibe, freu ich mich über eine positive Bewertung.

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 02.04.08, 22:16
  2. Bei JDOM Element XPath ermitteln
    Von fsmarine im Forum Java
    Antworten: 3
    Letzter Beitrag: 25.02.08, 14:32
  3. JDOM - bestimmtes Child löschen !
    Von Chimaira im Forum Java
    Antworten: 4
    Letzter Beitrag: 21.02.08, 06:36
  4. JDOM Problem mit Element.getChild()
    Von danielandross im Forum Java
    Antworten: 0
    Letzter Beitrag: 05.07.07, 16:56
  5. JDOM Element durchsuchen
    Von cloda im Forum Java
    Antworten: 0
    Letzter Beitrag: 28.08.06, 10:37