xml-xindice-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jonathan Melhuish <j.melhu...@signal.qinetiq.com>
Subject Re: Problem with XPathQueryService
Date Tue, 11 Nov 2003 10:32:31 GMT
So, why do I have no replies?

	a) Nobody knows the answer
	b) It's been asked too many times before
	c) The answer is so obvious it's embarrasing
	d) Nobody likes me ;-(

Jon

Jonathan Melhuish a écrit :
> 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 
> ;-)
> 
> 
> ------------------------------------------------------------------------
> 
>>>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);


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

email: j.melhuish@signal.qinetiq.com
Tel: 01684 894121   Fax: 01684 894389

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.


Mime
View raw message