KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > xmldb > common > xml > queries > xalan2 > XPathQueryImpl


1 package org.xmldb.common.xml.queries.xalan2;
2 /*
3  * The XML:DB Initiative Software License, Version 1.0
4  *
5  *
6  * Copyright (c) 2000-2003 The XML:DB Initiative. All rights
7  * reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution,
22  * if any, must include the following acknowledgment:
23  * "This product includes software developed by the
24  * XML:DB Initiative (http://www.xmldb.org/)."
25  * Alternately, this acknowledgment may appear in the software itself,
26  * if and wherever such third-party acknowledgments normally appear.
27  *
28  * 4. The name "XML:DB Initiative" must not be used to endorse or
29  * promote products derived from this software without prior written
30  * permission. For written permission, please contact info@xmldb.org.
31  *
32  * 5. Products derived from this software may not be called "XML:DB",
33  * nor may "XML:DB" appear in their name, without prior written
34  * permission of the XML:DB Initiative.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  * ====================================================================
49  *
50  * This software consists of voluntary contributions made by many
51  * individuals on behalf of the XML:DB Initiative. For more information
52  * on the XML:DB Initiative, please see <http://www.xmldb.org/>.
53  */

54 import org.w3c.dom.Node JavaDoc;
55 import org.w3c.dom.Document JavaDoc;
56 import org.w3c.dom.traversal.NodeFilter;
57 import org.apache.xml.utils.PrefixResolver;
58 import org.apache.xml.utils.PrefixResolverDefault;
59 import org.apache.xpath.XPathAPI;
60 import org.xmldb.common.xml.queries.XPathQuery;
61 import org.xmldb.common.xml.queries.XObject;
62
63 /**
64  * @version $Revision: 1.6 $ $Date: 2003/05/16 16:02:50 $
65  * @author <a HREF="http://www.softwarebuero.de">SMB</a>
66  */

67 public final class XPathQueryImpl implements XPathQuery {
68
69     //
70
// Data
71
//
72

73     private String JavaDoc qstring;
74     private Node JavaDoc rootNode;
75     private Node JavaDoc namespace;
76     private NodeFilter filter;
77     private PrefixResolver prefixResolver;
78
79     public XPathQueryImpl() {
80     }
81
82     public void setQString( String JavaDoc qstring ) throws Exception JavaDoc {
83         this.qstring = qstring;
84     }
85
86     public void setNamespace( Node JavaDoc namespace ) throws Exception JavaDoc {
87         this.namespace = namespace;
88     }
89
90     public void setNodeFilter( NodeFilter filter ) throws Exception JavaDoc {
91         this.filter = filter;
92     }
93
94     /**
95      * Execute the xpath.
96      *
97      * @param rootNode The node from which the query should start or null.
98      * @return The XObject insulating the query result.
99      */

100     public XObject execute( Node JavaDoc rootNode ) throws Exception JavaDoc {
101         if (rootNode.getNodeType() == Node.DOCUMENT_NODE) {
102             rootNode = ((Document JavaDoc)rootNode).getDocumentElement ();
103         }
104         this.rootNode = rootNode;
105         prefixResolver = namespace != null ? new PrefixResolverDefault (namespace):
106                                              new PrefixResolverDefault (rootNode);
107
108         // execute the XPath query on the specified root node
109
org.apache.xpath.objects.XObject xobj =
110                 XPathAPI.eval (rootNode, qstring, prefixResolver);
111
112         // seems that the
113
// if (xobj.getType() == org.apache.xpath.objects.XObject.CLASS_NODESET) {
114
// ((org.w3c.dom.NodeList)xobj.nodeset()).getLength();
115
// }
116

117         return new XObjectImpl (xobj);
118     }
119 }
120
121
Popular Tags