The cursors are designed to move very quickly and efficiently through
the document. One can use more cursors but it's not efficient to use a
new one for each record. 

In the for loop, if possible avoid creating new cursors, create only one
at the beginning and use that one for all the records, storing only the
bookmarks, both in the map and list. After indexing don't forget to
dispose the cursor.

For retrieving, you can create only one new cursor and move that one
from bookmark to bookmark ( c.toBookmark(bookmark) ) , and finally
dispose it.

Cezar

> -----Original Message-----
> From: heikki doeleman [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, August 08, 2006 5:50 AM
> To: [email protected]
> Subject: Using XmlCursor and XmlBookmark
> 
> 
> [sorry - this time with message subject]
> 
> Hello,
> 
> I'm thinking of using XmlCursor / XmlBookmark to create in andex to a
> large
> XML document. I'm wondering if I'm taking a right approach, as I found
not
> many real examples of XmlBookmark usage. Especially I'm wondering
whether
> the solution sketched below is prone to memory leaks, or otherwise
> inefficient. Also, I'm not entirely sure of the exact nature of
XmlCursor
> vs. XmlBookmark, and it may well be that I'm doing superfluous stuff
here;
> I
> hope you like to take a look.
> 
> Say the XML is like this
> 
> <catalog>
>     <recordlist>
>         <record>
>             <title>short text</title>
>             <description>much longer text</description>
>         </record>
>         . . . . . (many records)
>     </recordlist>
> </catalog>
> 
> My intent is to read this document into memory, then construct an
index
> such
> that each distinct word found in the description elements, acts as a
key
> that maps to a list of XmlBookmarks representing all records where
that
> word
> occurs. The code is like this:
> 
> CatalogDocument catalogDoc = CatalogDocument.Factory.parse(xmlFile);
> Catalog catalog = catalogDoc.getCatalog();
> RecordList recordList = catalog.getRecordList();
> Record[] recordArray = recordList.getRecordArray();
> // the index to construct
> Map bookmarxIdx = new HashMap();
> for(int i = 0; i < recordArray.length; i++) {
>     Record record = recordArray[i];
>     XmlCursor recordCursor = record.newCursor();
>     String description = record.getDescription();
>     StringTokenizer st = new StringTokenizer(description);
>     while(st.hasMoreTokens()) {
>           String word = st.nextToken();
>           List bookmarksForWord = (List) bookmarxIdx.get(word);
>           if(bookmarksForWord == null) {
>               bookmarksForWord = new ArrayList();
>           }
>           XmlCursor.XmlBookmark bookmark = new MyBookmark(word);
>           recordCursor.setBookmark(bookmark);
>           bookmarksForWord .add(recordCursor);
>           bookmarxIdx.put(word, bookmarxValue);
>     }
> }
> 
> // index is created. Now I can quickly retrieve the records that
contain
> some
> // word, for example "hello",  doing this:
> 
> List cursorsForSearchterm = (List) bookmarxIdx.get("hello");
> for(Iterator i = cursors.iterator(); i.hasNext();) {
>     XmlCursor c = (XmlCursor) i.next();
>     XmlCursor.XmlBookmark bm = c.getBookmark(MyBookmark.class);
>     c = bm.createCursor();
>     System.out.println("Found record:  " + c.getObject().toString() );
>     c.dispose();
> }
> 
> The catalog will ermain in application memory during its entire
lifetime,
> so
> I figured that it'd be okay to keep all the XmlCursors I'm storing in
the
> index -- also during application lifetime and without ever disposing
of
> them. Then when retrieving records, I retrieve the XmlCursors from the
> index, get their bookmark, create a new XmlCursor to position itslef
at
> that
> bookmark, retrieve the record from there, and dispose of this
XmlCursor.
> 
> although it works I would like to know whether this is a valid way of
> dealing with these XmlCursors and XmlBookmarks, or that I'm way off
the
> mark
> here ..
> 
> thank you so much, and regards
> Heikki Doeleman
> 
> 
> --
> View this message in context:
http://www.nabble.com/Using-XmlCursor-and-
> XmlBookmark-tf2071921.html#a5704059
> Sent from the Xml Beans - User forum at Nabble.com.
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]

_______________________________________________________________________
Notice:  This email message, together with any attachments, may contain
information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
entities,  that may be confidential,  proprietary,  copyrighted  and/or
legally privileged, and is intended solely for the use of the individual
or entity named in this message. If you are not the intended recipient,
and have received this message in error, please immediately return this
by email and then delete it.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to