public XmlMembersMapping ImportAnyType(XmlQualifiedName typeName, string elementName)
{
TypeMapping typeMapping = ImportType(typeName, typeof(MembersMapping), null, TypeFlags.CanBeElementValue, true);
MembersMapping mapping = typeMapping as MembersMapping;
if (mapping == null)
{
XmlSchemaComplexType type = new XmlSchemaComplexType();
XmlSchemaSequence seq = new XmlSchemaSequence();
type.Particle = seq;
XmlSchemaElement element = new XmlSchemaElement();
element.Name = elementName;
element.SchemaTypeName = typeName;
seq.Items.Add(element);
mapping = ImportMembersType(type, typeName.Namespace, elementName);
}
if (mapping.Members.Length != 1 || !mapping.Members[0].Accessor.Any)
return null;
mapping.Members[0].Name = elementName;
ElementAccessor accessor = new ElementAccessor();
accessor.Name = elementName;
accessor.Namespace = typeName.Namespace;
accessor.Mapping = mapping;
accessor.Any = true;
XmlSchemaObject xso = Schemas.SchemaSet.GlobalTypes[typeName];
if (xso != null)
{
XmlSchema schema = xso.Parent as XmlSchema;
if (schema != null)
{
accessor.Form = schema.ElementFormDefault == XmlSchemaForm.None ? XmlSchemaForm.Unqualified : schema.ElementFormDefault;
}
}
XmlMembersMapping members = new XmlMembersMapping(Scope, accessor, XmlMappingAccess.Read | XmlMappingAccess.Write);
return members;
}