private void DumpContentModelTo(StringBuilder sb, XmlSchemaParticle particle) {
if (particle is XmlSchemaElement) {
sb.Append(((XmlSchemaElement)particle).QualifiedName);
}
else if (particle is XmlSchemaAny) {
sb.Append("<");
sb.Append(((XmlSchemaAny)particle).NamespaceList.ToString());
sb.Append(">");
}
else if (particle is XmlSchemaAll) {
XmlSchemaAll all = (XmlSchemaAll)particle;
sb.Append("[");
bool first = true;
foreach (XmlSchemaElement localElement in all.Items) {
if (first) {
first = false;
}
else {
sb.Append(", ");
}
sb.Append(localElement.QualifiedName.Name);
if (localElement.MinOccurs == decimal.Zero) {
sb.Append("?");
}
}
sb.Append("]");
}
else if (particle is XmlSchemaGroupBase) {
XmlSchemaGroupBase gb = (XmlSchemaGroupBase)particle;
sb.Append("(");
string delimeter = (particle is XmlSchemaChoice) ? " | " : ", ";
bool first = true;
foreach (XmlSchemaParticle p in gb.Items) {
if (first) {
first = false;
}
else {
sb.Append(delimeter);
}
DumpContentModelTo(sb, p);
}
sb.Append(")");
} else {
Debug.Assert(particle == XmlSchemaParticle.Empty);
sb.Append("<>");
}
if (particle.MinOccurs == decimal.One && particle.MaxOccurs == decimal.One) {
// nothing
}
else if (particle.MinOccurs == decimal.Zero && particle.MaxOccurs == decimal.One) {
sb.Append("?");
}
else if (particle.MinOccurs == decimal.Zero && particle.MaxOccurs == decimal.MaxValue) {
sb.Append("*");
}
else if (particle.MinOccurs == decimal.One && particle.MaxOccurs == decimal.MaxValue) {
sb.Append("+");
}
else {
sb.Append("{" + particle.MinOccurs.ToString(NumberFormatInfo.InvariantInfo) +", " + particle.MaxOccurs.ToString(NumberFormatInfo.InvariantInfo) + "}");
}
}
#endif