internal XmlNode ToNode(XmlDocument dc, Hashtable prefixes, bool inRemoting)
{
XmlElement typeNode = dc.CreateElement(Keywords.XSD_PREFIX, Keywords.XSD_SIMPLETYPE, Keywords.XSDNS);
if (_name != null && _name.Length != 0)
{
// this is a global type
typeNode.SetAttribute(Keywords.NAME, _name);
if (inRemoting)
{
typeNode.SetAttribute(Keywords.TARGETNAMESPACE, Keywords.MSDNS, Namespace);
}
}
XmlElement type = dc.CreateElement(Keywords.XSD_PREFIX, Keywords.XSD_RESTRICTION, Keywords.XSDNS);
if (!inRemoting)
{
if (_baseSimpleType != null)
{
if (_baseSimpleType.Namespace != null && _baseSimpleType.Namespace.Length > 0)
{
string prefix = (prefixes != null) ? (string)prefixes[_baseSimpleType.Namespace] : null;
if (prefix != null)
{
type.SetAttribute(Keywords.BASE, (prefix + ":" + _baseSimpleType.Name));
}
else
{
type.SetAttribute(Keywords.BASE, _baseSimpleType.Name);
}
}
else
{ // amirhmy
type.SetAttribute(Keywords.BASE, _baseSimpleType.Name);
}
}
else
{
type.SetAttribute(Keywords.BASE, QualifiedName(_baseType)); // has to be xs:SomePrimitiveType
}
}
else
{
type.SetAttribute(Keywords.BASE, (_baseSimpleType != null) ? _baseSimpleType.Name : QualifiedName(_baseType));
}
XmlElement constraint;
if (_length >= 0)
{
constraint = dc.CreateElement(Keywords.XSD_PREFIX, Keywords.XSD_LENGTH, Keywords.XSDNS);
constraint.SetAttribute(Keywords.VALUE, _length.ToString(CultureInfo.InvariantCulture));
type.AppendChild(constraint);
}
if (_maxLength >= 0)
{
constraint = dc.CreateElement(Keywords.XSD_PREFIX, Keywords.XSD_MAXLENGTH, Keywords.XSDNS);
constraint.SetAttribute(Keywords.VALUE, _maxLength.ToString(CultureInfo.InvariantCulture));
type.AppendChild(constraint);
}
typeNode.AppendChild(type);
return typeNode;
}