Gathers all defined namespaces in the scope of the given DOM element. @param elem DOM element @param nsMap map
(final Node elem, final TokenObjectMap<byte[]> nsMap)
| 124 | * @param nsMap map |
| 125 | */ |
| 126 | private static void nsScope(final Node elem, final TokenObjectMap<byte[]> nsMap) { |
| 127 | Node n = elem; |
| 128 | // only elements can declare namespaces |
| 129 | while(n instanceof Element) { |
| 130 | final NamedNodeMap atts = n.getAttributes(); |
| 131 | final String prefix = n.getPrefix(); |
| 132 | if(prefix != null) { |
| 133 | final byte[] pref = token(prefix); |
| 134 | if(nsMap.get(pref) != null) nsMap.put(pref, token(n.getNamespaceURI())); |
| 135 | } |
| 136 | final int len = atts.getLength(); |
| 137 | for(int i = 0; i < len; ++i) { |
| 138 | final Attr a = (Attr) atts.item(i); |
| 139 | final byte[] name = token(a.getName()), val = token(a.getValue()); |
| 140 | if(Token.eq(name, XMLNS)) { |
| 141 | // default namespace |
| 142 | if(nsMap.get(Token.EMPTY) == null) nsMap.put(Token.EMPTY, val); |
| 143 | } else if(startsWith(name, XMLNS)) { |
| 144 | // prefixed namespace |
| 145 | final byte[] ln = local(name); |
| 146 | if(nsMap.get(ln) == null) nsMap.put(ln, val); |
| 147 | } |
| 148 | } |
| 149 | n = n.getParentNode(); |
| 150 | } |
| 151 | } |
| 152 | |
| 153 | @Override |
| 154 | public Atts namespaces() { |
no test coverage detected