IMHO It it still better to use the iterator.
This removed the need for the additional list and array creation.
As I said before you need to romove the object using the iterator, so in
your example 


Iterator elementIterator = root.elementIterator();
while(elementIterator.hasNext()){
        Element element = (Element)elementIterator.next();
        String name = element.attributeValue("name");
        System.out.println(name);
        if(!dict.containsKey(name)){
                System.out.println(name + " is an extra element...");
                root.remove(element);
            //element.detach();
                System.out.println("Deleted");
        }
}
Should be
while(elementIterator.hasNext()){
        Element element = (Element)elementIterator.next();
        String name = element.attributeValue("name");
        System.out.println(name);
        if(!dict.containsKey(name)){
                System.out.println(name + " is an extra element...");
                elementIterator.remove();  ///******* removed using the
iterator
                //root.remove(element); 
                //element.detach();
                System.out.println("Deleted");
        }
}


BTW are you merely trying to remove all elements with duplicated names?
Is so then you have find them all using an Xpath statement





-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of David D.
Lucas
Sent: Wednesday 18 February 2004 13:19
To: Ray Grieselhuber
Cc: [EMAIL PROTECTED]
Subject: Re: [dom4j-user] java.util.ConcurrentModificationException


Instead of using an iterator, try an object array list and iterate over 
the object array.

       Element root = doc.getRootElement();
       List list = root.elements();
       if (list!=null) {
         Element item=null;
         Object[] listArray = list.toArray();
         for (int i = 0; i < listArray.length; i++ ) {
           item=(Element)listArray[i];
           //do something or remove it
         }
       }


Ray Grieselhuber wrote:
> I modified the code to do this:
> 
>           Element root  = doc.getRootElement();
>           Iterator elementIterator = root.elementIterator();
> while(elementIterator.hasNext()){
>               Element element = (Element)elementIterator.next();
>               String name = element.attributeValue("name");
>               System.out.println(name);
>                             if(!dict.containsKey(name)){
>                   System.out.println(name + " is an extra
element...");
>
root.remove(element);
>                   //element.detach();
>                                                       
> System.out.println("Deleted");
>               }
>                         }
> 
> But I still get the same error. Any ideas?
> Thanks,
> Ray
> 
> 
> Mike Skells wrote:
> 
>> Hi Ray, Use remove() on the iterator
>> The message is correct. You are modifying the collection while the
>> iterator is operating. CME is thrown if any modification is make to
the
>> collection other than through the iterator
>>
>> Mike Skells
>>
>> -----Original Message-----
>> From: [EMAIL PROTECTED]
>> [mailto:[EMAIL PROTECTED] On Behalf Of Ray
>> Grieselhuber
>> Sent: Tuesday 17 February 2004 17:58
>> To: [EMAIL PROTECTED]
>> Subject: [dom4j-user] java.util.ConcurrentModificationException
>>
>>
>> Hello,
>> I am trying to remove nodes on a large set of data:
>>
>>            while(elementIterator.hasNext()){
>>                Element element = (Element)elementIterator.next();
>>                String name = element.attributeValue("name");
>>                System.out.println(name);
>>                              if(!dict.containsKey(name)){
>>                    System.out.println(name + " is an extra
>> element...");
>>                                                                      
>> element.detach();
>>                                                    }
>>                          }
>>
>> I am getting this error:
>>
>> java.util.ConcurrentModificationException
>>    at 
>>
java.util.AbstractList$Itr.checkForComodification(AbstractList.java:444)
>>    at java.util.AbstractList$Itr.next(AbstractList.java:417)
>>    at org.dom4j.tree.FilterIterator.findNext(FilterIterator.java:70)
>>    at org.dom4j.tree.FilterIterator.next(FilterIterator.java:45)
>>    at perfanalysis.SkinnyFiles.main(SkinnyFiles.java:55)
>> Exception in thread "main"
>>
>> I am using dom4j 1.4. Thanks!
>> Ray
>>
>>
>> -------------------------------------------------------
>> SF.Net is sponsored by: Speed Start Your Linux Apps Now.
>> Build and deploy apps & Web services for Linux with
>> a free DVD software kit from IBM. Click Now!
>> http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click
>> _______________________________________________
>> dom4j-user mailing list
>> [EMAIL PROTECTED]
>> https://lists.sourceforge.net/lists/listinfo/dom4j-user
>>
>>
>>
>>
>> -------------------------------------------------------
>> SF.Net is sponsored by: Speed Start Your Linux Apps Now.
>> Build and deploy apps & Web services for Linux with
>> a free DVD software kit from IBM. Click Now!
>> http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click
>> _______________________________________________
>> dom4j-user mailing list
>> [EMAIL PROTECTED]
>> https://lists.sourceforge.net/lists/listinfo/dom4j-user
>>
>>
>>
>>  
>>
> 
> 
> 
> -------------------------------------------------------
> SF.Net is sponsored by: Speed Start Your Linux Apps Now.
> Build and deploy apps & Web services for Linux with
> a free DVD software kit from IBM. Click Now!
> http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click
> _______________________________________________
> dom4j-user mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/dom4j-user
> 


-- 

+------------------------------------------------------------+
| David Lucas                      mailto: ddlucas @ lse.com |
| Lucas Software Engineering, Inc.   (740) 964-6248 Voice    |
| Unix,Java,C++,CORBA,XML,EJB        (614) 668-4020 Mobile   |
| Middleware,Frameworks              (888) 866-4728 Fax/Msg  |
+------------------------------------------------------------+
| GPS Location:  40.0150 deg Lat,  -82.6378 deg Long         |
| IMHC: "Jesus Christ is the way, the truth, and the life."  |
| IMHC: "I know where I am; I know where I'm going."    <><  |
+------------------------------------------------------------+

Notes: PGP Key Block=http://www.lse.com/~ddlucas/pgpblock.txt
IMHO="in my humble opinion" IMHC="in my humble conviction"
All trademarks above are those of their respective owners.




-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click
_______________________________________________
dom4j-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dom4j-user




-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click
_______________________________________________
dom4j-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dom4j-user

Reply via email to