I'm trying to do something essentially fairly straightforward but I can't for the life of me see why it's not working :-( All I want to do is retreive certain nodes from within my XML database, eg. the "title" nodes.

As far as I understand, using the Xpath query "//title" should select all of the title nodes, irrespective of their position in the document tree - and indeed it does, when I use the Xindice command-line interface, it gives me exactly what I want. But when I use the XPathQueryService from within a Java program it doesn't, it returns everything, including the parent node and all of it's children!

That's obvious, I hear you cry, "you've cocked up the Java code"! But the same code, when fed, for instance "/", returns everything. Or when fed a blank query, it returns nothing. Which seems sensible.

What gives?

TIA,

Jon
PS: Just a nudge in the right direction would be helpful. I've also attatched the relevant code sections just in case you still suspect them ;-)


--
Jonathan Melhuish, E101
Distributed Technology Group
Advanced Processing Centre
QinetiQ Malvern

email: [EMAIL PROTECTED]
Tel: 01684 894121

This e-mail may contain information which is commercial-in-confidence
and/or legally privileged. For persons other than the intended
recipient(s), any use, disclosure, copying or distribution of the e-mail
or information contained therein is prohibited.
>From the Java source:

                XPathQueryService service = (XPathQueryService) 
col.getService("XPathQueryService","1.0");
                ResourceSet resultSet = service.query(xpath);
                ResourceIterator i = resultSet.getIterator();
                while (i.hasMoreResources()) {
                        XMLResource r = ((XMLResource) i.nextResource());
                        Element doc = ((Document) 
r.getContentAsDOM()).getDocumentElement();
                        if (doc.getFirstChild() != null) {
                                String s = doc.getFirstChild().getNodeValue(); 
// text node
                                
results.add(doc.getAttributeNS("http://xml.apache.org/xindice/Query","key";));
                    }
                }
                // now eliminate dupes
                Iterator listIterator = results.iterator();
                while (listIterator.hasNext()) {
                String curElement = (String) listIterator.next();
                int index = results.indexOf(curElement);
                // is there another element identical to this one? if so then 
remove the current element 
                if (results.indexOf(curElement) != 
results.lastIndexOf(curElement)) listIterator.remove();
                }
                return results;

Call from the JSP file:

     List results = manager.querySelective("//title");
     Iterator i = results.iterator();
     while (i.hasNext()) {
            TerrainMap map = manager.getMap((String) i.next());
            String str = Utils.serializeDocument(map.saveToXML());
            str = str.replaceFirst("<\\?xml version=\"1.0\"\\?>",""); // 
eliminate the first processing instruction
            out.println(str);

Reply via email to