コード例 #1
0
        internal static XElement GetXElement(XTypedElement xObj, XName name, Type elementBaseType)
        {
            XElement newElement = xObj.Untyped;

            if (newElement.Parent != null)
            {
                //Element/XTypedElement already added to the tree, need to clone XTypedElement
                newElement = xObj.Clone().Untyped;
            }

            IXMetaData metaData = xObj as IXMetaData;

            Debug.Assert(metaData != null);
            if (metaData.TypeOrigin == SchemaOrigin.Fragment)
            {
                //Set correct element name as the name of the property/element
                newElement.Name = name;
            }

            //Does this need a type qualifier?
            if (xObj.GetType() != elementBaseType)
            {
                //Don't overwrite anything explicitly added
                var xsiType = (string)newElement.Attribute(XName.Get("type", XmlSchema.InstanceNamespace));
                if (xsiType == null)
                {
                    var    defNs    = xObj.Untyped.GetDefaultNamespace();
                    string typeName = null;
                    if (metaData.SchemaName.Namespace == defNs ||
                        (defNs == XNamespace.None && metaData.SchemaName.Namespace == name.Namespace))
                    {
                        typeName = metaData.SchemaName.LocalName;
                    }
                    else
                    {
                        var prefix = xObj.Untyped.GetPrefixOfNamespace(metaData.SchemaName.Namespace);
                        if (prefix == null)
                        {
                            typeName = metaData.SchemaName.LocalName;
                        }
                        else
                        {
                            typeName = prefix + ":" + metaData.SchemaName.LocalName;
                        }
                    }

                    newElement.Add(new XAttribute(XName.Get("type", XmlSchema.InstanceNamespace), typeName));
                }
            }

            return(newElement);
        }
コード例 #2
0
        internal static XElement GetXElement(XTypedElement xObj, XName name)
        {
            XElement newElement = xObj.Untyped;

            if (newElement.Parent != null)
            {
                newElement = xObj.Clone().Untyped;
            }
            IXMetaData metaData = xObj;

            Debug.Assert(metaData != null);
            if (metaData.TypeOrigin == SchemaOrigin.Fragment)
            {
                newElement.Name = name;
            }
            return(newElement);
        }
コード例 #3
0
        public static XTypedElement GetCloneIfRooted(XTypedElement innerType)
        {
            if (innerType == null)
            {
                throw new ArgumentNullException("Argument innerType should not be null.");
            }

            XElement fragment = innerType.Untyped;
            XTypedElementWrapperAnnotation wrapperAnnotation = fragment.Annotation <XTypedElementWrapperAnnotation>();

            if (wrapperAnnotation != null)
            {
                //Already rooted to a wrapper
                return(innerType.Clone());
            }
            else
            {
                return(innerType);
            }
        }
コード例 #4
0
        internal static XElement GetXElement(XTypedElement xObj, XName name)
        {
            XElement newElement = xObj.Untyped;

            if (newElement.Parent != null)
            {
                //Element/XTypedElement already added to the tree, need to clone XTypedElement
                newElement = xObj.Clone().Untyped;
            }

            IXMetaData metaData = xObj as IXMetaData;

            Debug.Assert(metaData != null);
            if (metaData.TypeOrigin == SchemaOrigin.Fragment)
            {
                //Set correct element name as the name of the property/element
                newElement.Name = name;
            }

            return(newElement);
        }
コード例 #5
0
        public static XTypedElement GetCloneIfRooted(XTypedElement innerType)
        {
            XTypedElement xTypedElement;

            if (innerType == null)
            {
                throw new ArgumentNullException("Argument innerType should not be null.");
            }
            xTypedElement = (innerType.Untyped.Annotation <XTypedElementWrapperAnnotation>() == null ? innerType : innerType.Clone());
            return(xTypedElement);
        }