Пример #1
0
 private void RequireNoXsiType(IXmlKnownType knownType)
 {
     if (knownType.XsiType != XmlName.Empty)
     {
         throw Error.CannotSetAttribute(this);
     }
 }
Пример #2
0
        private XmlName GetEffectiveName(IXmlKnownType knownType, XmlNode parent)
        {
            var name = knownType.Name;

            return(name.NamespaceUri != null
              ? name
              : name.WithNamespaceUri(parent != null ? parent.NamespaceURI : string.Empty));
        }
Пример #3
0
        private void ConfigureIncludedTypes(IXmlKnownType knownType)
        {
            var includedTypes = Context.GetIncludedTypes(knownType.ClrType);

            foreach (var include in includedTypes)
            {
                AddKnownType(knownType.Name, include.XsiType, include.ClrType, false);
            }
        }
Пример #4
0
        private void CreateAttribute(IXmlKnownType knownType, XmlNode position)
        {
            RequireNoXsiType(knownType);

            var parent    = node;
            var name      = GetEffectiveName(knownType, parent);
            var attribute = CreateAttributeCore(parent, name);

            parent.Attributes.InsertBefore(attribute, (XmlAttribute)position);
            state = State.Attribute;
        }
Пример #5
0
        private void CreateElement(IXmlKnownType knownType, XmlNode position)
        {
            var parent  = node;
            var name    = GetEffectiveName(knownType, parent);
            var element = CreateElementCore(parent, name);

            parent.InsertBefore(element, position);
            state = State.Element;

            if (knownType.XsiType != XmlName.Empty)
            {
                this.SetXsiType(knownType.XsiType);
            }
        }
Пример #6
0
        private void CoerceAttribute(IXmlKnownType knownType)
        {
            RequireNoXsiType(knownType);

            var oldNode = (XmlAttribute)node;
            var parent  = oldNode.OwnerElement;
            var name    = GetEffectiveName(knownType, parent);

            if (!XmlNameComparer.Default.Equals(this.Name, name))
            {
                var newNode    = CreateAttributeCore(parent, name);
                var attributes = parent.Attributes;
                attributes.RemoveNamedItem(newNode.LocalName, newNode.NamespaceURI);
                attributes.InsertBefore(newNode, oldNode);
                attributes.Remove(oldNode);
            }
        }
Пример #7
0
        private void CoerceElement(IXmlKnownType knownType)
        {
            var oldNode = (XmlElement)node;
            var parent  = oldNode.ParentNode;
            var name    = GetEffectiveName(knownType, parent);

            if (!XmlNameComparer.Default.Equals(this.Name, name))
            {
                var newNode = CreateElementCore(parent, name);
                parent.ReplaceChild(newNode, oldNode);

                if (knownType.XsiType != XmlName.Empty)
                {
                    this.SetXsiType(knownType.XsiType);
                }
            }
            else
            {
                this.SetXsiType(knownType.XsiType);
            }
        }
Пример #8
0
 public bool TryGet(Type clrType, out IXmlKnownType knownType)
 {
     return(IsMatch(clrType)
                                 ? Try.Success(out knownType, this)
                                 : Try.Failure(out knownType));
 }
Пример #9
0
 public bool TryGet(IXmlIdentity xmlName, out IXmlKnownType knownType)
 {
     return(IsMatch(xmlName)
                                 ? Try.Success(out knownType, this)
                                 : Try.Failure(out knownType));
 }
Пример #10
0
		private XmlName GetEffectiveName(IXmlKnownType knownType, XmlNode parent)
		{
			var name = knownType.Name;

			return name.NamespaceUri != null
				? name
				: name.WithNamespaceUri
				(
					parent != null
						? parent.NamespaceURI
						: string.Empty
				);
		}
Пример #11
0
		private void RequireNoXsiType(IXmlKnownType knownType)
		{
			if (knownType.XsiType != XmlName.Empty)
				throw Error.CannotSetAttribute(this);
		}
Пример #12
0
		private void CreateAttribute(IXmlKnownType knownType, XmlNode position)
		{
			RequireNoXsiType(knownType);

			var parent    = node;
			var name      = GetEffectiveName(knownType, parent);
			var attribute = CreateAttributeCore(parent, name);
			parent.Attributes.InsertBefore(attribute, (XmlAttribute) position);
			state = State.Attribute;
		}
Пример #13
0
		private void CreateElement(IXmlKnownType knownType, XmlNode position)
		{
			var parent  = node;
			var name    = GetEffectiveName(knownType, parent);
			var element = CreateElementCore(parent, name);
			parent.InsertBefore(element, position);
			state = State.Element;

			if (knownType.XsiType != XmlName.Empty)
				this.SetXsiType(knownType.XsiType);
		}
Пример #14
0
		private void CoerceAttribute(IXmlKnownType knownType)
		{
			RequireNoXsiType(knownType);

			var oldNode = (XmlAttribute) node;
			var parent  = oldNode.OwnerElement;
			var name    = GetEffectiveName(knownType, parent);

			if (!XmlNameComparer.Default.Equals(this.Name, name))
			{
				var newNode    = CreateAttributeCore(parent, name);
				var attributes = parent.Attributes;
				attributes.RemoveNamedItem(newNode.LocalName, newNode.NamespaceURI);
				attributes.InsertBefore(newNode, oldNode);
				attributes.Remove(oldNode);
			}
		}
Пример #15
0
		private void CoerceElement(IXmlKnownType knownType)
		{
			var oldNode = (XmlElement) node;
			var parent  = oldNode.ParentNode;
			var name    = GetEffectiveName(knownType, parent);

			if (!XmlNameComparer.Default.Equals(this.Name, name))
			{
				var newNode = CreateElementCore(parent, name);
				parent.ReplaceChild(newNode, oldNode);

				if (knownType.XsiType != XmlName.Empty)
					this.SetXsiType(knownType.XsiType);
			}
			else this.SetXsiType(knownType.XsiType);
		}