You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xindice-users@xml.apache.org by Wolfram Horwath <wo...@innovations.de> on 2003/12/12 12:45:04 UTC
XPATH-Query on single document in collection
Hi!
Is there a way to execute a XPATH-Query on only one specified document
in a collection?
Thanks!
Wolfram
Re: XPATH-Query on single document in collection
Posted by Wolfram Horwath <wo...@innovations.de>.
OK, now this is working as I want it. I was missing this, should have
had a closer look into JavaDoc :-)
Thanks again!
Upayavira schrieb:
> You need to query a resource, rather than a collection. Here's some
> code in Cocoon that'll do it. Check out the resourceToSAX method, and
> the associated queryToSAX() method.
>
> http://cvs.apache.org/viewcvs.cgi/cocoon-2.1/src/blocks/xmldb/java/org/apache/cocoon/components/source/impl/XMLDBSource.java
>
>
> Upayavira
>
> Wolfram Horwath wrote:
>
>> Maybe I'm doing it wrong, but it doesn't seem to work.
>> So here's what I'm doing:
>>
>> I have a class XmlDB which has a method open() and query(xpath):
>>
>> public void open () {
>> try {
>> String driver = "org.apache.xindice.client.xmldb.DatabaseImpl";
>> Class c = Class.forName(driver);
>>
>> Database database = (Database) c.newInstance();
>> DatabaseManager.registerDatabase(database);
>>
>> String url = protocol + dbhost + collection;
>>
>> dbCollection = DatabaseManager.getCollection(url);
>> } catch (XMLDBException xmle) {
>> System.err.println("XML:DB Exception occured " +
>> xmle.errorCode);
>> } catch (Exception e) {
>> e.printStackTrace();
>> }
>> }
>>
>> public ResourceSet query (String xpath) {
>> ResourceSet rs = null;
>> try {
>> XPathQueryService service =
>> (XPathQueryService)
>> dbCollection.getService("XPathQueryService",
>> "1.0");
>> rs = service.query(xpath);
>> } catch (XMLDBException xmle) {
>> xmle.printStackTrace();
>> }
>> return (rs);
>> }
>>
>> The collection I work on is /db/upro with documents having labels
>> like klasse0.xml.
>> With collection.listResources() I try to get a list of all documents
>> in the collection, to query each one afterwards.
>>
>> When I try to set the collection to /db/upro/klasse0.xml for my
>> following query I get a NullPointerException, when trying to query
>> with /db/upro/klasse0.xml/some/more or /klasse0.xml/some/more or
>> similar, on collection /db/upro, just nothing happens.
>>
>> So, any hints what I am doing wrong?
>>
>> Wolfram Horwath schrieb:
>>
>>> I wasn't aware if this was possible as it's not mentioned anywhere
>>> in the documentation. I thought of this possibility but wanted
>>> confirmation, so I'm going to try it that way.
>>>
>>> Thanks for your help!
>>>
>>> Wolfram
>>>
>>> Upayavira schrieb:
>>>
>>>> Wolfram Horwath wrote:
>>>>
>>>>> Hi!
>>>>>
>>>>> Is there a way to execute a XPATH-Query on only one specified
>>>>> document in a collection?
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Erm. Isn't this easy? /db/collection/#//xpath does an Xpath on a
>>>> collection, whereas /db/collection/document#//xpath does one on a
>>>> document in a collection.
>>>>
>>>> Am, I missing something?
>>>>
>>>> Upayavira
>>>>
>>>>
>>>
>>
>>
>
>
Re: XPATH-Query on single document in collection
Posted by Upayavira <uv...@upaya.co.uk>.
You need to query a resource, rather than a collection. Here's some code
in Cocoon that'll do it. Check out the resourceToSAX method, and the
associated queryToSAX() method.
http://cvs.apache.org/viewcvs.cgi/cocoon-2.1/src/blocks/xmldb/java/org/apache/cocoon/components/source/impl/XMLDBSource.java
Upayavira
Wolfram Horwath wrote:
> Maybe I'm doing it wrong, but it doesn't seem to work.
> So here's what I'm doing:
>
> I have a class XmlDB which has a method open() and query(xpath):
>
> public void open () {
> try {
> String driver = "org.apache.xindice.client.xmldb.DatabaseImpl";
> Class c = Class.forName(driver);
>
> Database database = (Database) c.newInstance();
> DatabaseManager.registerDatabase(database);
>
> String url = protocol + dbhost + collection;
>
> dbCollection = DatabaseManager.getCollection(url);
> } catch (XMLDBException xmle) {
> System.err.println("XML:DB Exception occured " + xmle.errorCode);
> } catch (Exception e) {
> e.printStackTrace();
> }
> }
>
> public ResourceSet query (String xpath) {
> ResourceSet rs = null;
> try {
> XPathQueryService service =
> (XPathQueryService)
> dbCollection.getService("XPathQueryService",
> "1.0");
> rs = service.query(xpath);
> } catch (XMLDBException xmle) {
> xmle.printStackTrace();
> }
> return (rs);
> }
>
> The collection I work on is /db/upro with documents having labels like
> klasse0.xml.
> With collection.listResources() I try to get a list of all documents
> in the collection, to query each one afterwards.
>
> When I try to set the collection to /db/upro/klasse0.xml for my
> following query I get a NullPointerException, when trying to query
> with /db/upro/klasse0.xml/some/more or /klasse0.xml/some/more or
> similar, on collection /db/upro, just nothing happens.
>
> So, any hints what I am doing wrong?
>
> Wolfram Horwath schrieb:
>
>> I wasn't aware if this was possible as it's not mentioned anywhere in
>> the documentation. I thought of this possibility but wanted
>> confirmation, so I'm going to try it that way.
>>
>> Thanks for your help!
>>
>> Wolfram
>>
>> Upayavira schrieb:
>>
>>> Wolfram Horwath wrote:
>>>
>>>> Hi!
>>>>
>>>> Is there a way to execute a XPATH-Query on only one specified
>>>> document in a collection?
>>>
>>>
>>>
>>>
>>> Erm. Isn't this easy? /db/collection/#//xpath does an Xpath on a
>>> collection, whereas /db/collection/document#//xpath does one on a
>>> document in a collection.
>>>
>>> Am, I missing something?
>>>
>>> Upayavira
>>>
>>>
>>
>
>
Re: XPATH-Query on single document in collection
Posted by Wolfram Horwath <wo...@innovations.de>.
Maybe I'm doing it wrong, but it doesn't seem to work.
So here's what I'm doing:
I have a class XmlDB which has a method open() and query(xpath):
public void open () {
try {
String driver = "org.apache.xindice.client.xmldb.DatabaseImpl";
Class c = Class.forName(driver);
Database database = (Database) c.newInstance();
DatabaseManager.registerDatabase(database);
String url = protocol + dbhost + collection;
dbCollection = DatabaseManager.getCollection(url);
} catch (XMLDBException xmle) {
System.err.println("XML:DB Exception occured " + xmle.errorCode);
} catch (Exception e) {
e.printStackTrace();
}
}
public ResourceSet query (String xpath) {
ResourceSet rs = null;
try {
XPathQueryService service =
(XPathQueryService) dbCollection.getService("XPathQueryService",
"1.0");
rs = service.query(xpath);
} catch (XMLDBException xmle) {
xmle.printStackTrace();
}
return (rs);
}
The collection I work on is /db/upro with documents having labels like
klasse0.xml.
With collection.listResources() I try to get a list of all documents in
the collection, to query each one afterwards.
When I try to set the collection to /db/upro/klasse0.xml for my
following query I get a NullPointerException, when trying to query with
/db/upro/klasse0.xml/some/more or /klasse0.xml/some/more or similar, on
collection /db/upro, just nothing happens.
So, any hints what I am doing wrong?
Wolfram Horwath schrieb:
> I wasn't aware if this was possible as it's not mentioned anywhere in
> the documentation. I thought of this possibility but wanted
> confirmation, so I'm going to try it that way.
>
> Thanks for your help!
>
> Wolfram
>
> Upayavira schrieb:
>
>> Wolfram Horwath wrote:
>>
>>> Hi!
>>>
>>> Is there a way to execute a XPATH-Query on only one specified
>>> document in a collection?
>>
>>
>>
>> Erm. Isn't this easy? /db/collection/#//xpath does an Xpath on a
>> collection, whereas /db/collection/document#//xpath does one on a
>> document in a collection.
>>
>> Am, I missing something?
>>
>> Upayavira
>>
>>
>
Re: XPATH-Query on single document in collection
Posted by Wolfram Horwath <wo...@innovations.de>.
I wasn't aware if this was possible as it's not mentioned anywhere in
the documentation. I thought of this possibility but wanted
confirmation, so I'm going to try it that way.
Thanks for your help!
Wolfram
Upayavira schrieb:
> Wolfram Horwath wrote:
>
>> Hi!
>>
>> Is there a way to execute a XPATH-Query on only one specified
>> document in a collection?
>
>
> Erm. Isn't this easy? /db/collection/#//xpath does an Xpath on a
> collection, whereas /db/collection/document#//xpath does one on a
> document in a collection.
>
> Am, I missing something?
>
> Upayavira
>
>
Re: XPATH-Query on single document in collection
Posted by Upayavira <uv...@upaya.co.uk>.
Wolfram Horwath wrote:
> Hi!
>
> Is there a way to execute a XPATH-Query on only one specified document
> in a collection?
Erm. Isn't this easy? /db/collection/#//xpath does an Xpath on a
collection, whereas /db/collection/document#//xpath does one on a
document in a collection.
Am, I missing something?
Upayavira