internal static XmlSchemaParticle CloneParticle(XmlSchemaParticle particle)
{
XmlSchemaGroupBase groupBase = particle as XmlSchemaGroupBase;
if (groupBase != null && !(groupBase is XmlSchemaAll)) //Choice or sequence
{
XmlSchemaGroupBase newGroupBase = groupBase;
XmlSchemaObjectCollection newGroupbaseParticles = CloneGroupBaseParticles(groupBase.Items);
newGroupBase = (XmlSchemaGroupBase)groupBase.Clone();
newGroupBase.SetItems(newGroupbaseParticles);
return(newGroupBase);
}
else if (particle is XmlSchemaGroupRef) // group ref
{
XmlSchemaGroupRef newGroupRef = (XmlSchemaGroupRef)particle.Clone();
newGroupRef.RefName = newGroupRef.RefName.Clone();
return(newGroupRef);
}
else
{
XmlSchemaElement oldElem = particle as XmlSchemaElement;
if (oldElem != null && (!oldElem.RefName.IsEmpty || !oldElem.SchemaTypeName.IsEmpty)) //Its element ref or type name is present
{
XmlSchemaElement newElem = (XmlSchemaElement)oldElem.Clone();
return(newElem);
}
}
return(particle);
}