System.Data.XmlSchemaWriter.WriteTableType C# (CSharp) Method

WriteTableType() private method

private WriteTableType ( DataTable table ) : void
table DataTable
return void
		private void WriteTableType (DataTable table)
		{
			ArrayList elements;
			ArrayList atts;
			DataColumn simple;

			DataSet.SplitColumns (table, out atts, out elements, out simple);

			w.WriteStartElement ("xs", "complexType", xmlnsxs);

			if (simple != null) {
				w.WriteStartElement ("xs", "simpleContent", xmlnsxs);
				// add column name attribute
				w.WriteAttributeString (
					XmlConstants.MsdataPrefix,
					XmlConstants.ColumnName,
					XmlConstants.MsdataNamespace,
					XmlHelper.Encode (simple.ColumnName));

				// add ordinal attribute
				w.WriteAttributeString (
					XmlConstants.MsdataPrefix,
					XmlConstants.Ordinal,
					XmlConstants.MsdataNamespace,
					XmlConvert.ToString (simple.Ordinal));

				// add extension
				w.WriteStartElement ("xs", "extension",
					xmlnsxs);
				w.WriteStartAttribute ("base", String.Empty);
				WriteQName (MapType (simple.DataType));
				w.WriteEndAttribute ();

				WriteTableAttributes (atts);

				w.WriteEndElement ();
			} else {
				WriteTableAttributes (atts);
				bool isNested = false;
				foreach (DataRelation rel in table.ParentRelations) {
					if (rel.Nested) {
						isNested = true;
						break;
					}
				}
				
				// When we have a nested relationship and only one table,
				// could be that we have a reference attribute
				if (elements.Count > 0 || (isNested && tables.Length < 2)) {
					w.WriteStartElement ("xs", "sequence",
						xmlnsxs);

					foreach (DataColumn col in elements)
						WriteTableTypeParticles (col);

					foreach (DataRelation rel in table.ChildRelations)
						if (rel.Nested)
							WriteChildRelations (rel);
					w.WriteEndElement ();
				}
			}

			w.WriteFullEndElement (); // complexType
		}