1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
package nokogiri.internals;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.xml.XMLConstants;
import javax.xml.namespace.NamespaceContext;
/**
* Holder of each node's namespace.
*
* @author Yoko Harada <yokolet@gmail.com>
*
*/
public final class NokogiriNamespaceContext implements NamespaceContext
{
/*
* these constants have matching declarations in
* ext/nokogiri/xml_xpath_context.c
*/
public static final String NOKOGIRI_PREFIX = "nokogiri";
public static final String NOKOGIRI_URI = "http://www.nokogiri.org/default_ns/ruby/extensions_functions";
public static final String NOKOGIRI_BUILTIN_PREFIX = "nokogiri-builtin";
public static final String NOKOGIRI_BUILTIN_URI = "https://www.nokogiri.org/default_ns/ruby/builtins";
private final Map<String, String> register;
public static NokogiriNamespaceContext
create()
{
return new NokogiriNamespaceContext();
}
private
NokogiriNamespaceContext()
{
register = new HashMap<String, String>(6, 1);
register.put(NOKOGIRI_PREFIX, NOKOGIRI_URI);
register.put(NOKOGIRI_BUILTIN_PREFIX, NOKOGIRI_BUILTIN_URI);
register.put("xml", "http://www.w3.org/XML/1998/namespace");
register.put("xhtml", "http://www.w3.org/1999/xhtml");
}
public String
getNamespaceURI(String prefix)
{
if (prefix == null) {
throw new IllegalArgumentException();
}
String uri = this.register.get(prefix);
if (uri != null) {
return uri;
}
if (prefix.equals(XMLConstants.XMLNS_ATTRIBUTE)) {
uri = this.register.get(XMLConstants.XMLNS_ATTRIBUTE);
return (uri == null) ? XMLConstants.XMLNS_ATTRIBUTE_NS_URI : uri;
}
return XMLConstants.NULL_NS_URI;
}
public String
getPrefix(String uri)
{
if (uri == null) {
throw new IllegalArgumentException("uri is null");
}
Set<Entry<String, String>> entries = register.entrySet();
for (Entry<String, String> entry : entries) {
if (uri.equals(entry.getValue())) {
return entry.getKey();
}
}
return null;
}
public Iterator<String>
getPrefixes(String uri)
{
Set<Entry<String, String>> entries = register.entrySet();
ArrayList<String> list = new ArrayList<String>(entries.size());
for (Entry<String, String> entry : entries) {
if (uri.equals(entry.getValue())) {
list.add(entry.getKey());
}
}
return list.iterator();
}
public Set<String>
getAllPrefixes()
{
return register.keySet();
}
public void
registerNamespace(String prefix, String uri)
{
if ("xmlns".equals(prefix)) { prefix = ""; }
register.put(prefix, uri);
}
}
|