This is indeed an oddity in the design of the xmldb api.  Clearly it
causes much confusion, as it did for me too.  I received some of this
code on the list.  Here, you can see a function that will remove every
doc obtained from any xpath query.  This shows how to obtain the id from
the ResourceSet.

        /**
         * Removes all resources returned by the query.
         * 
         */
        public void remove(Collection collection, String xpath) throws
Exception {

                //
                // We really have to do this in a bogus way to work
around a problem with the xml:db api.
                //              You cannot remove a resource from a
collection when the resource is 
                //                      obtained from an
XPathQueryService.
                //
                ResourceSet resourceSet = loadResourceSet(collection,
xpath);
                ResourceIterator resourceIterator =
resourceSet.getIterator();
                while (resourceIterator.hasMoreResources()) {
                        Resource res = resourceIterator.nextResource();
                        if (res instanceof XMLResource) {

                                // find the key (getId() doesn't work,
apparently
                                // because Resources from ResourceSets
are "anonymous"?)
                                Node xmldoc = ((XMLResource)
res).getContentAsDOM().getFirstChild();
                                NamedNodeMap attrs =
xmldoc.getAttributes();
                                Node keyNode =
attrs.getNamedItemNS("http://xml.apache.org/xindice/Query";, "key");
                                String key = keyNode.getNodeValue();

                                // now that we have the key, remove
resource from collection
                                Resource doc =
collection.getResource(key);
                                if (doc != null) {
                                        collection.removeResource(doc);
                                }
                        }
                }
        }

-----Original Message-----
From: Gul Akbar [mailto:[EMAIL PROTECTED] 
Sent: Friday, April 04, 2003 7:09 AM
To: [EMAIL PROTECTED]
Subject: Getting ID for a retrieved document

Hi,

How do I get the ID from a Resource which I set when I added the record?

Resource res = results.nextResource();
String ID = res.getId();

This returns the String ID as 'null' everytime!


Thanks
Gul

-------------------------------------------------
This mail sent through IMP: webmail.brad.ac.uk


Reply via email to