Пример #1
0
        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
        }