Exemplo n.º 1
0
        internal void SetElement(XName name, object value, bool addToExisting, XmlSchemaDatatype datatype, Type elementBaseType)
        {
            XElement parentElement = this.GetUntyped();

            CheckXsiNil(parentElement);
            if (value == null)
            {
                //Delete existing node
                Debug.Assert(addToExisting == false);
                DeleteChild(name);
            }
            else
            {
                IXMetaData schemaMetaData = this as IXMetaData; //Get parent's content model
                Debug.Assert(schemaMetaData != null);
                ContentModelEntity cm = schemaMetaData.GetContentModel();

                if (elementBaseType == null)
                {
                    if (!schemaMetaData.LocalElementsDictionary.TryGetValue(name, out elementBaseType))
                    {
                        elementBaseType = value?.GetType();
                    }
                }


                cm.AddElementToParent(name, value, parentElement, addToExisting, datatype, elementBaseType);
            }
        }
Exemplo n.º 2
0
        internal void SetElement(XName name, object value, bool addToExisting, XmlSchemaDatatype datatype, Type elementBaseType)
        {
            XElement parentElement = this.GetUntyped();

            CheckXsiNil(parentElement);
            if (value == null)
            {
                //Delete existing node
                Debug.Assert(addToExisting == false);
                DeleteChild(name);
            }
            else
            {
                IXMetaData schemaMetaData = this as IXMetaData; //Get parent's content model
                Debug.Assert(schemaMetaData != null);
                ContentModelEntity cm = GetParentContentModel(this as IXMetaData, name);

                if (elementBaseType == null)
                {
                    if (!schemaMetaData.LocalElementsDictionary.TryGetValue(name, out elementBaseType))
                    {
                        elementBaseType = value?.GetType();
                    }
                }


                cm.AddElementToParent(name, value, parentElement, addToExisting, datatype, elementBaseType);
            }

            ContentModelEntity GetParentContentModel(IXMetaData schemaMetaData, XName xname)
            {
                Debug.Assert(schemaMetaData != null);
                ContentModelEntity cmRoot = schemaMetaData.GetContentModel();

                if (cmRoot is SchemaAwareContentModelEntity cmGroup)
                {
                    var cmNamed  = cmGroup.GetNamedEntity(xname);
                    var cmParent = cmNamed.ParentContentModel;
                    return(cmParent);
                }
                else
                {
                    return(cmRoot);
                }
            }
        }
Exemplo n.º 3
0
        internal void SetElement(XName name, object value, bool addToExisting, XmlSchemaDatatype datatype)
        {
            XElement parentElement = this.GetUntyped();

            CheckXsiNil(parentElement);
            if (value == null)
            {
                //Delete existing node
                Debug.Assert(addToExisting == false);
                DeleteChild(name);
            }
            else
            {
                IXMetaData schemaMetaData = this as IXMetaData; //Get parent's content model
                Debug.Assert(schemaMetaData != null);
                ContentModelEntity cm = schemaMetaData.GetContentModel();
                cm.AddElementToParent(name, value, parentElement, addToExisting, datatype);
            }
        }