Nowadays, XmlDeclaratoin.WriteTo() writes PI instead of raw.
[mono.git] / mcs / class / System.XML / System.Xml / XmlQualifiedName.cs
index bedf001fc44abf98898fe716f44196339b0c7353..710e9ed7d4a10cf0fead77f81fcb2edd2c26c903 100644 (file)
@@ -33,6 +33,9 @@ using System;
 
 namespace System.Xml
 {
+#if NET_2_0
+       [Serializable]
+#endif
        public class XmlQualifiedName
        {
                // Constructors         
@@ -105,6 +108,44 @@ namespace System.Xml
                                return ns + ":" + name;
                }
 
+               internal static XmlQualifiedName Parse (string name, IXmlNamespaceResolver resolver)
+               {
+                       return Parse (name, resolver, false);
+               }
+
+               internal static XmlQualifiedName Parse (string name, IXmlNamespaceResolver resolver, bool considerDefaultNamespace)
+               {
+                       int index = name.IndexOf (':');
+                       if (index < 0 && !considerDefaultNamespace)
+                               return new XmlQualifiedName (name);
+                       string prefix = index < 0 ? String.Empty : name.Substring (0, index);
+                       string localName = index < 0 ? name : name.Substring (index + 1);
+                       string ns = resolver.LookupNamespace (prefix);
+                       if (ns == null) {
+                               if (prefix.Length > 0)
+                                       throw new ArgumentException ("Invalid qualified name.");
+                               else
+                                       ns = String.Empty;
+                       }
+                       return new XmlQualifiedName (localName, ns);
+               }
+
+               internal static XmlQualifiedName Parse (string name, XmlReader reader)
+               {
+                       return Parse (name, reader, false);
+               }
+
+               internal static XmlQualifiedName Parse (string name, XmlReader reader, bool considerDefaultNamespace)
+               {
+                       int index = name.IndexOf (':');
+                       if (index < 0 && !considerDefaultNamespace)
+                               return new XmlQualifiedName (name);
+                       string ns = reader.LookupNamespace (index < 0 ? String.Empty : name.Substring (0, index));
+                       if (ns == null && index > 0)
+                               throw new ArgumentException ("Invalid qualified name.");
+                       return new XmlQualifiedName (index < 0 ? name : name.Substring (index + 1), ns);
+               }
+
                // Operators
                public static bool operator == (XmlQualifiedName a, XmlQualifiedName b)
                {