package com.swtxml.ide; import java.util.Collection; import java.util.HashMap; import java.util.Map; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import com.swtxml.definition.INamespaceDefinition; import com.swtxml.extensions.ExtensionsNamespaceResolver; public class DocumentNamespaceBrowser { private Map<String, INamespaceDefinition> definitionByURI = new HashMap<String, INamespaceDefinition>(); private Map<INamespaceDefinition, String> prefixByDefinition = new HashMap<INamespaceDefinition, String>(); public DocumentNamespaceBrowser(Document doc) { ExtensionsNamespaceResolver resolver = new ExtensionsNamespaceResolver(); NamedNodeMap attributes = doc.getDocumentElement().getAttributes(); for (int i = 0; i < attributes.getLength(); i++) { Node attr = attributes.item(i); String nodeName = attr.getNodeName(); if (nodeName.startsWith("xmlns")) { String prefix = nodeName; if (prefix.startsWith("xmlns:")) { prefix = prefix.substring(6); } else { prefix = prefix.substring(5); } String uri = attr.getNodeValue(); INamespaceDefinition namespaceDefinition = resolver.resolveNamespace(uri); if (namespaceDefinition != null) { definitionByURI.put(uri, namespaceDefinition); prefixByDefinition.put(namespaceDefinition, prefix); } } } } public INamespaceDefinition getByURI(String namespaceURI) { return definitionByURI.get(namespaceURI); } public Collection<INamespaceDefinition> getAllDefinitions() { return definitionByURI.values(); } public String getPrefix(INamespaceDefinition namespace) { String prefix = prefixByDefinition.get(namespace); if (prefix == null) { return null; } return prefix.length() > 0 ? prefix + ":" : ""; } }