<br><font size=2 face="Courier New">If there are a lot of elements in the list then the following from Brad I found useful. </font>
<br>
<br><font size=2 face="Courier New">My XML file had 7000 child entries and the following reduced the build time from 0.9 seconds (which the user noticed) to below 0.1 second which they did not notice.</font>
<br>
<br><font size=2 face="Courier New">Don't use getChildren (which BTW was renamed to getChildElements in the current<br>
cvs). &nbsp;The list returned by getChildren is both filtered, to show only<br>
Elements, and &quot;live&quot;. &quot;live&quot; meaning changes to the list are reflected in the<br>
element's underlying content. &nbsp;One problem is a element has no way of knowing<br>
how many child elements it has or were they are in the content list with<br>
scanning the underlying content list and counting. So size() in the line<br>
<br>
 &nbsp; for (int i = 0; i &lt; element_list.size (); i ++)<br>
<br>
causes element_list's actual content list to be scanned on each call, counting<br>
Elements and skipping any Text, Comment, or ProcessingInstruction node.<br>
Similarly element_list.get(i) cann't determine where the i th Element is<br>
without starting from index 0 in the underlying content list and scanning until<br>
it finds the i th Element or runs out of nodes.<br>
<br>
Iterators because a certain state must be maintained between a call to <br>
hasNext() and next() have their own slew of problems. If your interested,<br>
search the archives for ConcurrentModificationException.<br>
<br>
A solution to your problem in this case is to use getContent instead of<br>
getChildren since size() is known (not calculated) by the parent element<br>
and get(index) references the actual content list (not a filtered version).<br>
<br>
 &nbsp;private void transform_document (Element parent_element) {<br>
 &nbsp; &nbsp;List list = parent_element.getContent();<br>
 &nbsp; &nbsp;int size = list.size();<br>
 &nbsp; &nbsp;for (int i = 0; i &lt; size; i ++) {<br>
 &nbsp; &nbsp; &nbsp;Object node = list.get(i);<br>
 &nbsp; &nbsp; &nbsp;if (node instanceof Element) {<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Element element = (Element) obj;<br>
 <br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (element.getNamespace() == orange_namespace) {<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// &nbsp;do something ....<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// &nbsp;replace old element<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;list.set(i, new_element);<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
 <br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;transform_document(element);<br>
 &nbsp; &nbsp; &nbsp;}<br>
 &nbsp; &nbsp;}<br>
 &nbsp;}</font><font size=2 face="sans-serif"><br>
<br>
/Phill<br>
IS Dept, Software Engineer.<br>
phill_perryman@mitel.com<br>
http://www.mitel.com<br>
Tel: +44 1291 436023</font>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td>
<td><font size=1 face="sans-serif"><b>Laurent Bihanic &lt;laurent.bihanic@atosorigin.com&gt;</b></font>
<br><font size=1 face="sans-serif">Sent by: jdom-interest-admin@jdom.org</font>
<p><font size=1 face="sans-serif">06/07/2004 13:17</font>
<br>
<td><font size=1 face="Arial">&nbsp; &nbsp; &nbsp; &nbsp; </font>
<br><font size=1 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; To: &nbsp; &nbsp; &nbsp; &nbsp;Edd Dawson &lt;E.J.Dawson@derby.ac.uk&gt;</font>
<br><font size=1 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; cc: &nbsp; &nbsp; &nbsp; &nbsp;jdom-interest@jdom.org</font>
<br><font size=1 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Subject: &nbsp; &nbsp; &nbsp; &nbsp;Re: [jdom-interest] Iterating through XML</font></table>
<br>
<br>
<br><font size=2 face="Courier New"><br>
for (Iterator i=doc.getRootElement().getChildren(&quot;InboundMessage&quot;).iterator(); <br>
i.hasNext(); )<br>
{<br>
 &nbsp; &nbsp; Element inboundMessage = (Element)(i.next());<br>
<br>
 &nbsp; &nbsp; ...<br>
}<br>
<br>
Laurent<br>
<br>
<br>
Edd Dawson wrote:<br>
<br>
&gt; Hi <br>
&gt; <br>
&gt; I have got the following code :<br>
&gt; <br>
&gt; Document doc = null;<br>
&gt; try {<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;doc = builder.build(reader);<br>
&gt; } catch(Exception ex) {<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return &quot;Error on making xml returned SAXable&quot; + ex.getMessage();<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; Which puts my inputStream XML nicely into the parser.<br>
&gt; <br>
&gt; <br>
&gt; Now i have the following in there :<br>
&gt; <br>
&gt; &lt;Response&gt;<br>
&gt; &nbsp; &nbsp;&lt;InboundMessage&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &lt;Ticket&gt;1278&lt;/Ticket&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &lt;MessageText&gt;Example 1&lt;/MessageText&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &lt;Phone&gt;+4409878656787&lt;/Phone&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &lt;Date&gt;123456123&lt;/Date&gt;<br>
&gt; &nbsp; &nbsp;&lt;/InboundMessage&gt;<br>
&gt; &nbsp; &nbsp;&lt;InboundMessage&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &lt;Ticket&gt;1279&lt;/Ticket&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &lt;MessageText&gt;Example 2&lt;/MessageText&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &lt;Phone&gt;+4409878656787&lt;/Phone&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &lt;Date&gt;123456123&lt;/Date&gt;<br>
&gt; &nbsp; &nbsp;&lt;/InboundMessage&gt;<br>
&gt; &nbsp; &nbsp;&lt;InboundMessage&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &lt;Ticket&gt;1280&lt;/Ticket&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &lt;MessageText&gt;Example 3&lt;/MessageText&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &lt;Phone&gt;+4409878656787&lt;/Phone&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &lt;Date&gt;123456123&lt;/Date&gt;<br>
&gt; &nbsp; &nbsp;&lt;/InboundMessage&gt;<br>
&gt; &lt;/Request&gt;<br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; I can't figure out from the manuals and docs that i have read how to<br>
&gt; iterate through all the instances of &lt;InboundMessage&gt; so i can retrieve<br>
&gt; the elements of each and bung them in a database.<br>
&gt; <br>
&gt; Would anyone have any ideas how to do so?<br>
&gt; <br>
&gt; thanks<br>
&gt; Edd<br>
&gt; <br>
&gt; _______________________________________________<br>
&gt; To control your jdom-interest membership:<br>
&gt; http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhost.com<br>
&gt; <br>
<br>
-- <br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;wWw<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (o o)<br>
-------------ooO-(_)-Ooo-----------------------------------------------<br>
Laurent Bihanic &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| Tel: +33 (0)1 55.91.21.93 (direct)<br>
AtosOrigin Systems Integration | &nbsp; &nbsp; &nbsp;+33 (0)1 55.91.20.00<br>
Generic Solutions / SC &nbsp; &nbsp; &nbsp; &nbsp; | Fax: +33 (0)1 55.91.22.31<br>
Les Miroirs - Bat. C &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |<br>
18, avenue d'Alsace &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|<br>
F-92926 La Defense Cedex &nbsp; &nbsp; &nbsp; | E-mail: laurent.bihanic@atosorigin.com<br>
-----------------------------------------------------------------------<br>
<br>
Plonge tes racines dans la terre<br>
Laisse nous vivre avec le vent<br>
Passe l'hiver comme les graines<br>
Et chante au printemps comme les oiseaux<br>
<br>
<br>
DISCLAIMER:<br>
The opinions expressed are entirely my own and may not necessarily be<br>
those of my employer. &nbsp;Also, I am not now nor have I ever been a<br>
lawyer. &nbsp;My opinions are provided as-is with absolutely no warrantee of<br>
merchantability or fitness for any particular use. &nbsp;Besides, you can't<br>
prove I typed this. &nbsp;No body saw me type this. &nbsp;Who says I typed this?<br>
_______________________________________________<br>
To control your jdom-interest membership:<br>
http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhost.com</font>
<br>
<br>
<br>