1 16 17 package org.apache.taglibs.standard.tag.common.xml; 18 19 import java.util.Vector ; 20 21 import javax.servlet.jsp.JspTagException ; 22 import javax.xml.transform.TransformerException ; 23 24 import org.apache.taglibs.standard.resources.Resources; 25 import org.apache.xml.utils.PrefixResolver; 26 import org.apache.xpath.XPath; 27 import org.apache.xpath.XPathAPI; 28 import org.apache.xpath.XPathContext; 29 import org.apache.xpath.objects.XObject; 30 import org.w3c.dom.Node ; 31 import org.w3c.dom.NodeList ; 32 import org.w3c.dom.traversal.NodeIterator; 33 34 53 public class JSTLXPathAPI extends XPathAPI { 54 65 public static Node selectSingleNode( 66 Node contextNode, String str, PrefixResolver prefixResolver) 67 throws JspTagException { 68 69 NodeIterator nl = selectNodeIterator(contextNode, str, prefixResolver); 71 72 return nl.nextNode(); 74 } 75 76 87 public static Node selectSingleNode( 88 Node contextNode, String str, PrefixResolver prefixResolver, 89 XPathContext xpathSupport ) throws JspTagException { 90 91 NodeIterator nl = selectNodeIterator(contextNode, str, prefixResolver, xpathSupport); 93 94 return nl.nextNode(); 96 } 97 98 109 public static NodeIterator selectNodeIterator( 110 Node contextNode, String str, PrefixResolver prefixResolver) 111 throws JspTagException { 112 113 XObject list = eval(contextNode, str, prefixResolver, null); 115 116 return getNodeIterator(list); 118 } 119 120 131 public static NodeIterator selectNodeIterator( 132 Node contextNode, String str, PrefixResolver prefixResolver, 133 XPathContext xpathSupport ) throws JspTagException { 134 135 XObject list = eval(contextNode, str, prefixResolver, xpathSupport); 137 138 return getNodeIterator(list); 140 } 141 142 153 private static NodeList selectNodeList( 154 Node contextNode, String str, PrefixResolver prefixResolver) 155 throws JspTagException { 156 XObject list = eval(contextNode, str, prefixResolver, null); 158 159 return getNodeList(list); 161 } 162 163 174 public static NodeList selectNodeList( 175 Node contextNode, String str, PrefixResolver prefixResolver, 176 XPathContext xpathSupport ) 177 throws JspTagException 178 { 179 XObject list = eval(contextNode, str, prefixResolver, xpathSupport); 181 182 return getNodeList(list); 184 } 185 186 192 private static NodeIterator getNodeIterator(XObject list) 193 throws JspTagException { 194 try { 195 return list.nodeset(); 196 } catch (TransformerException ex) { 197 throw new JspTagException ( 198 Resources.getMessage("XPATH_ERROR_XOBJECT", ex.toString()), ex); 199 } 200 } 201 202 208 static NodeList getNodeList(XObject list) 209 throws JspTagException { 210 try { 211 return list.nodelist(); 212 } catch (TransformerException ex) { 213 throw new JspTagException ( 214 Resources.getMessage("XPATH_ERROR_XOBJECT", ex.toString()), ex); 215 } 216 } 217 218 240 public static XObject eval( 241 Node contextNode, String str, PrefixResolver prefixResolver, 242 XPathContext xpathSupport) throws JspTagException { 243 try { 247 if (xpathSupport == null) { 248 return eval(contextNode, str, prefixResolver); 249 } 250 251 XPath xpath = new XPath(str, null, prefixResolver, XPath.SELECT, null); 258 259 int ctxtNode = xpathSupport.getDTMHandleFromNode(contextNode); 261 262 XObject xobj = xpath.execute(xpathSupport, ctxtNode, prefixResolver); 264 return xobj; 265 } catch (TransformerException ex) { 266 throw new JspTagException ( 267 Resources.getMessage("XPATH_ERROR_EVALUATING_EXPR", str, ex.toString()), ex); 268 } catch (IllegalArgumentException ex) { 269 throw new JspTagException ( 270 Resources.getMessage("XPATH_ILLEGAL_ARG_EVALUATING_EXPR", str, ex.toString()), ex); 271 } 272 } 273 274 public static XObject eval( 275 Node contextNode, String str, PrefixResolver prefixResolver, 276 XPathContext xpathSupport, Vector varQNames) throws JspTagException { 277 try { 285 XPath xpath = new XPath(str, null, prefixResolver, XPath.SELECT, null); 286 xpath.fixupVariables( varQNames, varQNames.size()); 287 int ctxtNode = xpathSupport.getDTMHandleFromNode(contextNode); 289 return xpath.execute(xpathSupport, ctxtNode, prefixResolver); 291 } catch (TransformerException ex) { 292 throw new JspTagException ( 293 Resources.getMessage("XPATH_ERROR_EVALUATING_EXPR", str, ex.toString()), ex); 294 } catch (IllegalArgumentException ex) { 295 throw new JspTagException ( 296 Resources.getMessage("XPATH_ILLEGAL_ARG_EVALUATING_EXPR", str, ex.toString()), ex); 297 } 298 } 299 300 private static void p(String s) { 301 System.out.println("[JSTLXPathAPI] " + s); 302 } 303 } 304 | Popular Tags |