// John Donagher (john@webmeta.com)
//
// (C) 2002 John Donagher
-// Modified:
-// June 22, 2002 Ajay kumar Dwivedi (adwiv@yahoo.com)
+//
using System;\r
using System.Xml;\r
namespace System.Xml.Serialization\r
{\r
/// <summary>\r
- /// XmlSerializerNamespaces contains the unique mapping between a prefix and namespace.\r
- /// For a given prefix, we should have exactly one namespace.\r
- /// Ideally, for a given namespace there should be exactly one prefix.But \r
- /// this is not enforced in MS implementation. We enforce both conditions.\r
+ /// Summary description for XmlSerializerNamespaces.\r
/// </summary>\r
- /// <remarks>\r
- /// XmlSerializerNamespaces can be used both during serialization and deserialization.\r
- /// During serialization, we need key to be the namespace whereas during deserialization,\r
- /// the key should be prefix. So we maintain both the mappings in two hashtables.\r
- /// Both the tables must always be synchronized.\r
- /// </remarks>\r
public class XmlSerializerNamespaces\r
{\r
- private Hashtable nameToNsMap;\r
- private Hashtable nsToNameMap;\r
-\r
+ private Hashtable namespaces;\r
+ \r
public XmlSerializerNamespaces ()\r
{\r
- nameToNsMap = new Hashtable ();\r
- nsToNameMap = new Hashtable ();\r
+ namespaces = new Hashtable ();\r
}\r
-\r
+ \r
public XmlSerializerNamespaces(XmlQualifiedName[] namespaces)\r
: this()\r
{\r
- foreach(XmlQualifiedName qname in namespaces)\r
+ foreach(XmlQualifiedName qname in namespaces) \r
{\r
- //Remove the keys if value is present.\r
- if(nameToNsMap.ContainsKey(qname.Name))\r
- {\r
- nsToNameMap.Remove(nameToNsMap[qname.Name]);\r
- nameToNsMap.Remove(qname.Name);\r
- }\r
- if(nsToNameMap.ContainsKey(qname.Namespace))\r
- {\r
- nameToNsMap.Remove(nsToNameMap[qname.Namespace]);\r
- nsToNameMap.Remove(qname.Namespace);\r
- }\r
- nameToNsMap.Add(qname.Name, qname.Namespace);\r
- nsToNameMap.Add(qname.Namespace, qname.Name);\r
+ this.namespaces[qname.Name] = qname;\r
}\r
}\r
-\r
+ \r
public XmlSerializerNamespaces(XmlSerializerNamespaces namespaces)\r
: this(namespaces.ToArray())\r
- {\r
- }\r
-\r
+ {}\r
+ \r
public void Add (string prefix, string ns)\r
{\r
- nameToNsMap.Add(prefix, ns);\r
- nsToNameMap.Add(ns, prefix);\r
+ XmlQualifiedName qname = new XmlQualifiedName(prefix,ns);\r
+ namespaces[qname.Name] = qname; \r
}\r
-\r
+ \r
public XmlQualifiedName[] ToArray ()\r
{\r
- XmlQualifiedName[] array = new XmlQualifiedName[Count];\r
- int i=0;\r
- foreach(string name in nameToNsMap.Keys)\r
- {\r
- array[i++] = new XmlQualifiedName(name, (string)nameToNsMap[name]);\r
- }\r
+ XmlQualifiedName[] array = new XmlQualifiedName[namespaces.Count];\r
+ namespaces.Values.CopyTo(array,0);\r
return array;\r
}\r
-\r
+ \r
public int Count \r
{\r
- get{ return nsToNameMap.Count; }\r
+ get{ return namespaces.Count; }\r
}\r
\r
+ internal string GetPrefix(string Ns)\r
+ {\r
+ foreach(string prefix in namespaces.Keys)\r
+ {\r
+ if(Ns == ((XmlQualifiedName)namespaces[prefix]).Namespace) \r
+ return prefix;\r
+ }\r
+ return null;\r
+ }\r
+
+ internal Hashtable Namespaces
+ {
+ get {
+ return namespaces;
+ }
+ }
}\r
}\r