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); }
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); }
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); } }
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); }
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); }