1 16 package org.apache.taglibs.standard.tag.common.xml; 17 18 import java.util.HashMap ; 19 20 import org.apache.xml.utils.PrefixResolver; 21 import org.w3c.dom.NamedNodeMap ; 22 import org.w3c.dom.Node ; 23 24 30 public class JSTLPrefixResolver implements PrefixResolver 31 { 32 33 36 37 HashMap namespaces; 38 39 42 43 public static final String S_XMLNAMESPACEURI = 44 "http://www.w3.org/XML/1998/namespace"; 45 46 49 public JSTLPrefixResolver() 50 { 51 namespaces = new HashMap (); 52 } 53 54 public JSTLPrefixResolver( HashMap nses ) 55 { 56 namespaces = nses; 57 } 58 59 67 public String getNamespaceForPrefix(String prefix) 68 { 69 return (String )namespaces.get(prefix); 70 } 71 72 82 public String getNamespaceForPrefix(String prefix, 83 org.w3c.dom.Node namespaceContext) 84 { 85 86 Node parent = namespaceContext; 87 String namespace = null; 88 89 if (prefix.equals("xml")) 90 { 91 namespace = S_XMLNAMESPACEURI; 92 } 93 else 94 { 95 int type; 96 97 while ((null != parent) && (null == namespace) 98 && (((type = parent.getNodeType()) == Node.ELEMENT_NODE) 99 || (type == Node.ENTITY_REFERENCE_NODE))) 100 { 101 if (type == Node.ELEMENT_NODE) 102 { 103 NamedNodeMap nnm = parent.getAttributes(); 104 105 for (int i = 0; i < nnm.getLength(); i++) 106 { 107 Node attr = nnm.item(i); 108 String aname = attr.getNodeName(); 109 boolean isPrefix = aname.startsWith("xmlns:"); 110 111 if (isPrefix || aname.equals("xmlns")) 112 { 113 int index = aname.indexOf(':'); 114 String p = isPrefix ? aname.substring(index + 1) : ""; 115 116 if (p.equals(prefix)) 117 { 118 namespace = attr.getNodeValue(); 119 120 break; 121 } 122 } 123 } 124 } 125 126 parent = parent.getParentNode(); 127 } 128 } 129 130 return namespace; 131 } 132 133 138 public String getBaseIdentifier() 139 { 140 return null; 141 } 142 143 145 public boolean handlesNullPrefixes() { 146 return false; 147 } 148 149 public void addNamespace ( String prefix, String uri ) { 150 namespaces.put( prefix, uri ); 151 } 152 153 } 154 | Popular Tags |