Пример #1
0
 public UidCollector ParseFile()
 {
     while (reader.Read())
     {
         if (reader.NodeType == XmlNodeType.Element)
         {
             if (collector.RootElementLineNumber < 0)
             {
                 collector.RootElementLineNumber   = reader.LineNumber;
                 collector.RootElementLinePosition = reader.LinePosition;
             }
             if (reader.Name.IndexOf('.') < 0)
             {
                 var uid = new Uid(reader.LineNumber, reader.LinePosition + reader.Name.Length, reader.Name,
                                   SpaceInsertion.BeforeUid);
                 if (reader.HasAttributes)
                 {
                     reader.MoveToNextAttribute();
                     uid.LineNumber   = reader.LineNumber;
                     uid.LinePosition = reader.LinePosition;
                     uid.Space        = SpaceInsertion.AfterUid;
                     do
                     {
                         string ns = nsMgr.LookupNamespace(reader.Prefix);
                         //string ns = reader.NamespaceURI;
                         if ((reader.LocalName == AttributeNameUid) && (ns == XamlNamespaceX))
                         {
                             uid.Value        = reader.Value;
                             uid.LineNumber   = reader.LineNumber;
                             uid.LinePosition = reader.LinePosition;
                         }
                         else if ((reader.LocalName == AttributeNameName) && (ns == XamlNamespaceDefault))
                         {
                             uid.FrameworkElementName = reader.Value;
                         }
                         else if ((reader.LocalName == AttributeNameName) && (ns == XamlNamespaceX))
                         {
                             uid.FrameworkElementName = reader.Value;
                         }
                         else if (reader.Prefix == PerefixXmlns)
                         {
                             collector.AddNamespacePrefix(reader.LocalName);
                         }
                     } while (reader.MoveToNextAttribute());
                 }
                 if (uid.Value == null)
                 {
                     string prefix = nsMgr.LookupPrefix(XamlNamespaceX);
                     //string prefix = reader.LookupPrefix(XamlNamespaceX);
                     if (prefix != string.Empty)
                     {
                         uid.NamespacePrefix = prefix;
                     }
                 }
                 collector.AddUid(uid, true);
             }
         }
     }
     return(collector);
 }
        /// <summary>
        /// Retrieves, as an option, a prefix in this namespace resolver corresponding to the specified namespace name.
        /// If the namespace name is unknown, the option will be empty.
        /// A namespace name may correspond to multiple prefixes, and this method is not guaranteed to return the same result from any two calls for the same input.
        /// </summary>
        /// <param name="namespaceResolver"></param>
        /// <param name="namespaceName"></param>
        /// <returns></returns>
        public static Opt <string> LookupPrefixOpt(this IXmlNamespaceResolver namespaceResolver, string namespaceName)
        {
            if (namespaceResolver == null)
            {
                throw new ArgumentNullException("namespaceResolver");
            }
            if (namespaceName == null)
            {
                throw new ArgumentNullException("namespaceName");
            }
            var prefix = namespaceResolver.LookupPrefix(namespaceName);

            return(Opt.FullIfNotNull(prefix));
        }
Пример #3
0
        protected static string QNameToString(XmlQualifiedName qname, IXmlNamespaceResolver nsResolver)
        {
            string prefix;

            if (nsResolver == null)
            {
                return(string.Concat("{", qname.Namespace, "}", qname.Name));
            }

            prefix = nsResolver.LookupPrefix(qname.Namespace);
            if (prefix == null)
            {
                throw new InvalidCastException(SR.Format(SR.XmlConvert_TypeNoPrefix, qname.ToString(), qname.Namespace));
            }

            return((prefix.Length != 0) ? string.Concat(prefix, ":", qname.Name) : qname.Name);
        }
Пример #4
0
        protected static string QNameToString(XmlQualifiedName qname, IXmlNamespaceResolver nsResolver)
        {
            if (nsResolver == null)
            {
                return("{" + qname.Namespace + "}" + qname.Name);
            }
            string prefix = nsResolver.LookupPrefix(qname.Namespace);

            if (prefix == null)
            {
                throw new InvalidCastException(Res.GetString("XmlConvert_TypeNoPrefix", new object[] { qname.ToString(), qname.Namespace }));
            }
            if (prefix.Length == 0)
            {
                return(qname.Name);
            }
            return(prefix + ":" + qname.Name);
        }
 internal XmlAtomicValue(XmlSchemaType xmlType, object value, IXmlNamespaceResolver nsResolver)
 {
     if (value == null)
     {
         throw new ArgumentNullException("value");
     }
     if (xmlType == null)
     {
         throw new ArgumentNullException("xmlType");
     }
     this.xmlType = xmlType;
     this.objVal  = value;
     if ((nsResolver != null) && ((this.xmlType.TypeCode == XmlTypeCode.QName) || (this.xmlType.TypeCode == XmlTypeCode.Notation)))
     {
         XmlQualifiedName objVal = this.objVal as XmlQualifiedName;
         string           ns     = objVal.Namespace;
         this.nsPrefix = new NamespacePrefixForQName(nsResolver.LookupPrefix(ns), ns);
     }
 }
Пример #6
0
        internal XmlAtomicValue(XmlSchemaType xmlType, object value, IXmlNamespaceResolver nsResolver)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }
            if (xmlType == null)
            {
                throw new ArgumentNullException(nameof(xmlType));
            }
            _xmlType = xmlType;
            _objVal  = value;

            if (nsResolver != null && (_xmlType.TypeCode == XmlTypeCode.QName || _xmlType.TypeCode == XmlTypeCode.Notation))
            {                                //Its a qualifiedName
                XmlQualifiedName qname = _objVal as XmlQualifiedName;
                Debug.Assert(qname != null); //string representation is handled in a different overload
                string ns = qname.Namespace;
                _nsPrefix = new NamespacePrefixForQName(nsResolver.LookupPrefix(ns), ns);
            }
        }
Пример #7
0
        /// <summary>
        /// The retrieve default namespace prefix.
        /// </summary>
        /// <param name="resolver">
        /// The resolver.
        /// </param>
        /// <returns>
        /// The <see cref="string"/>.
        /// </returns>
        public static string RetrieveDefaultNamespacePrefix(IXmlNamespaceResolver resolver)
        {
            if (resolver == null)
            {
                return(null);
            }

            var str = resolver.LookupNamespace(string.Empty);

            if (string.IsNullOrEmpty(str))
            {
                return(string.Empty);
            }

            var prefix = resolver.LookupPrefix(str);

            if (string.IsNullOrEmpty(prefix))
            {
                var namespacesInScope = resolver.GetNamespacesInScope(XmlNamespaceScope.All);
                if (namespacesInScope == null)
                {
                    return(prefix);
                }

                foreach (var pair in namespacesInScope)
                {
                    var key = pair.Key;
                    if (!string.IsNullOrEmpty(key) && (string.Compare(pair.Value, str, StringComparison.Ordinal) == 0))
                    {
                        return(key);
                    }
                }
            }

            return(prefix);
        }
Пример #8
0
 string?IXmlNamespaceResolver.LookupPrefix(string namespaceName)
 {
     return(_readerAsResolver?.LookupPrefix(namespaceName));
 }
Пример #9
0
 string IXmlNamespaceResolver.LookupPrefix(string namespaceName)
 {
     return(readerAsNSResolver.LookupPrefix(namespaceName));
 }
Пример #10
0
 public string LookupPrefix(string ns)
 {
     return(nsResolver.LookupPrefix(ns));
 }
Пример #11
0
        public string LookupPrefix(string ns)
        {
            IXmlNamespaceResolver nsr = reader as IXmlNamespaceResolver;

            return(nsr.LookupPrefix(NameTable.Get(ns)));
        }
Пример #12
0
 string IXmlNamespaceResolver.LookupPrefix(string namespaceName)
 {
     return((_readerAsResolver == null) ? null : _readerAsResolver.LookupPrefix(namespaceName));
 }
Пример #13
0
 string IXmlNamespaceResolver.LookupPrefix(string ns)
 {
     return(nsResolver != null?nsResolver.LookupPrefix(ns) : String.Empty);
 }
Пример #14
0
 public string LookupPrefix(string namespaceName) =>
 _baseNamespaceResolver?.LookupPrefix(
     _nsmap.FirstOrDefault(x => x.Value == namespaceName).Value ?? namespaceName);
Пример #15
0
 public string LookupPrefix(string namespaceName) => _other.LookupPrefix(namespaceName);
 protected static string QNameToString(XmlQualifiedName qname, IXmlNamespaceResolver nsResolver)
 {
     if (nsResolver == null)
     {
         return ("{" + qname.Namespace + "}" + qname.Name);
     }
     string prefix = nsResolver.LookupPrefix(qname.Namespace);
     if (prefix == null)
     {
         throw new InvalidCastException(Res.GetString("XmlConvert_TypeNoPrefix", new object[] { qname.ToString(), qname.Namespace }));
     }
     if (prefix.Length == 0)
     {
         return qname.Name;
     }
     return (prefix + ":" + qname.Name);
 }
 internal string LookupPrefix(string namespaceName)
 {
     return(coreReaderNSResolver.LookupPrefix(namespaceName));
 }
 internal XmlAtomicValue(XmlSchemaType xmlType, object value, IXmlNamespaceResolver nsResolver)
 {
     if (value == null)
     {
         throw new ArgumentNullException("value");
     }
     if (xmlType == null)
     {
         throw new ArgumentNullException("xmlType");
     }
     this.xmlType = xmlType;
     this.objVal = value;
     if ((nsResolver != null) && ((this.xmlType.TypeCode == XmlTypeCode.QName) || (this.xmlType.TypeCode == XmlTypeCode.Notation)))
     {
         XmlQualifiedName objVal = this.objVal as XmlQualifiedName;
         string ns = objVal.Namespace;
         this.nsPrefix = new NamespacePrefixForQName(nsResolver.LookupPrefix(ns), ns);
     }
 }
Пример #19
0
        internal XmlAtomicValue(XmlSchemaType xmlType, object value, IXmlNamespaceResolver nsResolver)
        {
            if (value == null) throw new ArgumentNullException(nameof(value));
            if (xmlType == null) throw new ArgumentNullException(nameof(xmlType));
            _xmlType = xmlType;
            _objVal = value;

            if (nsResolver != null && (_xmlType.TypeCode == XmlTypeCode.QName || _xmlType.TypeCode == XmlTypeCode.Notation))
            { //Its a qualifiedName
                XmlQualifiedName qname = _objVal as XmlQualifiedName;
                Debug.Assert(qname != null); //string representation is handled in a different overload
                string ns = qname.Namespace;
                _nsPrefix = new NamespacePrefixForQName(nsResolver.LookupPrefix(ns), ns);
            }
        }
Пример #20
0
        private static string QNameToString(XmlQualifiedName qname, IXmlNamespaceResolver nsResolver)
        {
            string prefix;

            if (nsResolver == null)
                return string.Concat("{", qname.Namespace, "}", qname.Name);

            prefix = nsResolver.LookupPrefix(qname.Namespace);
            if (prefix == null)
                throw new InvalidCastException(SR.Format(SR.XmlConvert_TypeNoPrefix, qname.ToString(), qname.Namespace));

            return (prefix.Length != 0) ? string.Concat(prefix, ":", qname.Name) : qname.Name;
        }
Пример #21
0
        /// <summary>
        /// Creates an XSI:TYPE attribute that is friendly for RMIM structures
        /// </summary>
        private string CreateXSITypeName(Type type, Type interactionContextType, IXmlNamespaceResolver namespaceResolver)
        {

            StringBuilder xsiType = new StringBuilder();

            // Scan the registered xsi:types first before creating a type
            lock(this.m_syncRoot)
                foreach (var itm in this.s_typeNameMaps)
                    if (itm.Value == type)
                        return itm.Key;

            // First, does the type acutally have a model name?
            Object[] saList = type.GetCustomAttributes(typeof(StructureAttribute), true);
            if (saList.Length == 0)
                xsiType.Append(type.FullName);
            else
            {
                StructureAttribute sa = saList[0] as StructureAttribute;
                
                // Namespace prefix?
                if (!String.IsNullOrEmpty(sa.NamespaceUri) && namespaceResolver != null)
                {
                    string prefix = namespaceResolver.LookupPrefix(sa.NamespaceUri);
                    if (!String.IsNullOrEmpty(prefix))
                        xsiType.AppendFormat("{0}:", prefix);
                }
                // Is the type generic?
                if (type.IsGenericType) // yes, then first we output the interaction 
                {
                    if (interactionContextType == null)
                        throw new FormatterException("Cannot emit xsi:type when no interaction context is provided!");
                    Object[] inSaList = interactionContextType.GetCustomAttributes(typeof(StructureAttribute), true);
                    if (inSaList.Length == 0)
                        throw new FormatterException("Invalid interaction context. Interaction context type must carry a StructureAttribute");
                    xsiType.AppendFormat("{0}.", (inSaList[0] as StructureAttribute).Name);
                }

                // Output the model and class name
                if(sa.Model != null)
                    xsiType.AppendFormat("{0}.{1}", sa.Model, sa.Name);
                else
                    xsiType.Append(sa.Name);
            }

            return xsiType.ToString();
        }