Example #1
0
 private bool ProcessXsdSchema()
 {
     if ((this.dataReader.LocalName == this.XSD_SCHEMA) && (this.dataReader.NamespaceURI == this.XSDNS))
     {
         if (this.ignoreSchema)
         {
             this.dataReader.Skip();
         }
         else if (this.isTableLevel)
         {
             this.dataTable.ReadXSDSchema(this.dataReader, false);
             this.nodeToSchemaMap = new XmlToDatasetMap(this.dataReader.NameTable, this.dataTable);
         }
         else
         {
             this.dataSet.ReadXSDSchema(this.dataReader, false);
             this.nodeToSchemaMap = new XmlToDatasetMap(this.dataReader.NameTable, this.dataSet);
         }
     }
     else
     {
         if (((this.dataReader.LocalName != this.XDR_SCHEMA) || (this.dataReader.NamespaceURI != this.XDRNS)) && ((this.dataReader.LocalName != this.SQL_SYNC) || (this.dataReader.NamespaceURI != this.UPDGNS)))
         {
             return(false);
         }
         this.dataReader.Skip();
     }
     return(true);
 }
Example #2
0
 internal void LoadData(XmlDocument xdoc)
 {
     if (xdoc.DocumentElement != null)
     {
         bool enforceConstraints;
         if (this.isTableLevel)
         {
             enforceConstraints = this.dataTable.EnforceConstraints;
             this.dataTable.EnforceConstraints = false;
         }
         else
         {
             enforceConstraints = this.dataSet.EnforceConstraints;
             this.dataSet.EnforceConstraints = false;
             this.dataSet.fInReadXml         = true;
         }
         if (this.isTableLevel)
         {
             this.nodeToSchemaMap = new XmlToDatasetMap(this.dataTable, xdoc.NameTable);
         }
         else
         {
             this.nodeToSchemaMap = new XmlToDatasetMap(this.dataSet, xdoc.NameTable);
         }
         DataRow row = null;
         if (this.isTableLevel || ((this.dataSet != null) && this.dataSet.fTopLevelTable))
         {
             XmlElement documentElement = xdoc.DocumentElement;
             DataTable  schemaForNode   = (DataTable)this.nodeToSchemaMap.GetSchemaForNode(documentElement, this.FIgnoreNamespace(documentElement));
             if (schemaForNode != null)
             {
                 row = schemaForNode.CreateEmptyRow();
                 this.nodeToRowMap[documentElement] = row;
                 this.LoadRowData(row, documentElement);
                 schemaForNode.Rows.Add(row);
             }
         }
         this.LoadRows(row, xdoc.DocumentElement);
         this.AttachRows(row, xdoc.DocumentElement);
         if (this.isTableLevel)
         {
             this.dataTable.EnforceConstraints = enforceConstraints;
         }
         else
         {
             this.dataSet.fInReadXml         = false;
             this.dataSet.EnforceConstraints = enforceConstraints;
         }
     }
 }
Example #3
0
        internal void LoadData(XmlReader reader) {
            dataReader = DataTextReader.CreateReader(reader);

            int entryDepth = dataReader.Depth;                  // Store current XML element depth so we'll read
                                                                // correct portion of the XML and no more
            bool fEnforce = isTableLevel ? dataTable.EnforceConstraints : dataSet.EnforceConstraints;         
                                                                // Keep constraints status for datataset/table
            InitNameTable();                                    // Adds DataSet namespaces to reader's nametable

            if (nodeToSchemaMap == null) {                      // Create XML to dataset map
                nodeToSchemaMap = isTableLevel ? new XmlToDatasetMap(dataReader.NameTable, dataTable) :
                                                 new XmlToDatasetMap(dataReader.NameTable, dataSet);
            }

            if (isTableLevel) {
                dataTable.EnforceConstraints = false;           // Disable constraints
            }
            else {
                dataSet.EnforceConstraints = false;             // Disable constraints
                dataSet.fInReadXml = true;                      // We're in ReadXml now
            }

            if (topMostNode != null) {                          // Do we have top node?

                if (!isDiffgram && !isTableLevel) {             // Not a diffgram  and not DataSet?
                    DataTable table = nodeToSchemaMap.GetSchemaForNode(topMostNode, FIgnoreNamespace(topMostNode)) as DataTable;
                                                                // Try to match table in the dataset to this node
                    if (table != null) {                        // Got the table ?
                        LoadTopMostTable(table);                // Load top most node
                    }
                }

                topMostNode = null;                             // topMostNode is no more. Good riddance.
            }

            while( !dataReader.EOF ) {                          // Main XML parsing loop. Check for EOF just in case.
                if (dataReader.Depth < entryDepth)              // Stop if we have consumed all elements allowed
                    break;

                if ( reader.NodeType != XmlNodeType.Element ) { // Read till Element is found
                    dataReader.Read();
                    continue;
                }                
                DataTable table = nodeToSchemaMap.GetTableForNode(dataReader, FIgnoreNamespace(dataReader));
                                                                // Try to get table for node
                if (table == null) {                            // Read till table is found

                    if (!ProcessXsdSchema())                    // Check for schemas...
                        dataReader.Read();                      // Not found? Read next element.

                    continue;
                }                

                LoadTable(table,  false /* isNested */);        // Here goes -- load data for this table
                                                                // This is a root table, so it's not nested
            }

            if (isTableLevel) {
                dataTable.EnforceConstraints = fEnforce;        // Restore constraints and return
            } 
            else {
                dataSet.fInReadXml = false;                     // We're done.
                dataSet.EnforceConstraints = fEnforce;          // Restore constraints and return
            }
        }
Example #4
0
        internal void LoadData( XmlDocument xdoc ) {
            if (xdoc.DocumentElement == null)
                return;

            bool saveEnforce;

            if (isTableLevel) {
                saveEnforce = dataTable.EnforceConstraints;
                dataTable.EnforceConstraints = false;
            }
            else {
                saveEnforce = dataSet.EnforceConstraints;
                dataSet.EnforceConstraints = false;
                dataSet.fInReadXml = true;
            }

            if (isTableLevel) {
                nodeToSchemaMap = new XmlToDatasetMap(dataTable, xdoc.NameTable);
            }
            else {
                nodeToSchemaMap = new XmlToDatasetMap(dataSet, xdoc.NameTable);
            }
/*
            // Top level table or dataset ?
            XmlElement rootElement = xdoc.DocumentElement;
            Hashtable tableAtoms = new Hashtable();
            XmlNode tabNode;
            if (CountNonNSAttributes (rootElement) > 0)
                dataSet.fTopLevelTable = true;
            else {
                for (tabNode = rootElement.FirstChild; tabNode != null; tabNode = tabNode.NextSibling) {
                    if (tabNode is XmlElement && tabNode.LocalName != Keywords.XSD_SCHEMA) {
                        object value = tableAtoms[QualifiedName (tabNode.LocalName, tabNode.NamespaceURI)];
                        if (value == null || (bool)value == false) {
                            dataSet.fTopLevelTable = true;
                            break;
                        }
                    }
                }
            }
*/
            DataRow topRow = null;
            if (isTableLevel ||(dataSet!= null && dataSet.fTopLevelTable) ){
                XmlElement e = xdoc.DocumentElement;
                DataTable topTable = (DataTable) nodeToSchemaMap.GetSchemaForNode(e, FIgnoreNamespace(e));
                if (topTable != null) {
                    topRow = topTable.CreateEmptyRow(); //Microsoft perf
                    nodeToRowMap[ e ] = topRow;

                    // get all field values.
                    LoadRowData( topRow, e );
                    topTable.Rows.Add(topRow);                              
                }
            }

            LoadRows( topRow, xdoc.DocumentElement );
            AttachRows( topRow, xdoc.DocumentElement );


            if (isTableLevel) {
                dataTable.EnforceConstraints = saveEnforce;
            }
            else {
                dataSet.fInReadXml = false;
                dataSet.EnforceConstraints = saveEnforce;
            }

        }
Example #5
0
        // Check for schema and skips or loads XSD schema if found. Returns true if schema found.
        // DataReader would be set on the first XML element after the schema of schema was found.
        // If no schema detected, reader's position will not change.
        private bool ProcessXsdSchema () {
            if (((object)dataReader.LocalName == XSD_SCHEMA && (object)dataReader.NamespaceURI == XSDNS )) {
                                                                    // Found XSD schema
                if ( ignoreSchema ) {                               // Should ignore it?
                    dataReader.Skip();                              // Yes, skip it
                }
                else {                                              // Have to load schema.
                    if ( isTableLevel ) {                           // Loading into the DataTable ?
                        dataTable.ReadXSDSchema(dataReader, false); // Invoke ReadXSDSchema on a table
                        nodeToSchemaMap = new XmlToDatasetMap(dataReader.NameTable, dataTable);
                    }                                               // Rebuild XML to DataSet map with new schema.
                    else {                                          // Loading into the DataSet ?
                        dataSet.ReadXSDSchema(dataReader, false);   // Invoke ReadXSDSchema on a DataSet
                        nodeToSchemaMap = new XmlToDatasetMap(dataReader.NameTable, dataSet);
                    }                                               // Rebuild XML to DataSet map with new schema.
                }
            }
            else if (((object)dataReader.LocalName == XDR_SCHEMA && (object)dataReader.NamespaceURI == XDRNS ) || 
                    ((object)dataReader.LocalName == SQL_SYNC   && (object)dataReader.NamespaceURI == UPDGNS))
            {
                dataReader.Skip();                                  // Skip XDR or SQL sync 
            }
            else {
                return false;                                       // No schema found. That means reader's position 
                                                                    // is unchganged. Report that to the caller.
            }

            return true;                                            // Schema found, reader's position changed.
        }
Example #6
0
        private void LoadRowData(DataRow row, XmlElement rowElement)
        {
            DataTable table = row.Table;

            if (this.FromInference)
            {
                table.Prefix = rowElement.Prefix;
            }
            Hashtable hashtable = new Hashtable();

            row.BeginEdit();
            XmlNode    firstChild     = rowElement.FirstChild;
            DataColumn textOnlyColumn = this.GetTextOnlyColumn(row);

            if (textOnlyColumn != null)
            {
                hashtable[textOnlyColumn] = textOnlyColumn;
                string valueForTextOnlyColums = this.GetValueForTextOnlyColums(firstChild);
                if (XMLSchema.GetBooleanAttribute(rowElement, "nil", "http://www.w3.org/2001/XMLSchema-instance", false) && ADP.IsEmpty(valueForTextOnlyColums))
                {
                    row[textOnlyColumn] = DBNull.Value;
                }
                else
                {
                    this.SetRowValueFromXmlText(row, textOnlyColumn, valueForTextOnlyColums);
                }
            }
            while ((firstChild != null) && (firstChild != rowElement))
            {
                if (firstChild.NodeType == XmlNodeType.Element)
                {
                    XmlElement node          = (XmlElement)firstChild;
                    object     schemaForNode = this.nodeToSchemaMap.GetSchemaForNode(node, this.FIgnoreNamespace(node));
                    if ((schemaForNode is DataTable) && this.FColumnElement(node))
                    {
                        schemaForNode = this.nodeToSchemaMap.GetColumnSchema(node, this.FIgnoreNamespace(node));
                    }
                    if ((schemaForNode == null) || (schemaForNode is DataColumn))
                    {
                        firstChild = node.FirstChild;
                        if ((schemaForNode != null) && (schemaForNode is DataColumn))
                        {
                            DataColumn col = (DataColumn)schemaForNode;
                            if (((col.Table == row.Table) && (col.ColumnMapping != MappingType.Attribute)) && (hashtable[col] == null))
                            {
                                hashtable[col] = col;
                                string str = this.GetValueForTextOnlyColums(firstChild);
                                if (XMLSchema.GetBooleanAttribute(node, "nil", "http://www.w3.org/2001/XMLSchema-instance", false) && ADP.IsEmpty(str))
                                {
                                    row[col] = DBNull.Value;
                                }
                                else
                                {
                                    this.SetRowValueFromXmlText(row, col, str);
                                }
                            }
                        }
                        else if ((schemaForNode == null) && (firstChild != null))
                        {
                            continue;
                        }
                        if (firstChild == null)
                        {
                            firstChild = node;
                        }
                    }
                }
                while ((firstChild != rowElement) && (firstChild.NextSibling == null))
                {
                    firstChild = firstChild.ParentNode;
                }
                if (firstChild != rowElement)
                {
                    firstChild = firstChild.NextSibling;
                }
            }
            foreach (XmlAttribute attribute in rowElement.Attributes)
            {
                object columnSchema = this.nodeToSchemaMap.GetColumnSchema(attribute, this.FIgnoreNamespace(attribute));
                if ((columnSchema != null) && (columnSchema is DataColumn))
                {
                    DataColumn column3 = (DataColumn)columnSchema;
                    if ((column3.ColumnMapping == MappingType.Attribute) && (hashtable[column3] == null))
                    {
                        hashtable[column3] = column3;
                        firstChild         = attribute.FirstChild;
                        this.SetRowValueFromXmlText(row, column3, this.GetInitialTextFromNodes(ref firstChild));
                    }
                }
            }
            foreach (DataColumn column in row.Table.Columns)
            {
                if ((hashtable[column] == null) && XmlToDatasetMap.IsMappedColumn(column))
                {
                    if (!column.AutoIncrement)
                    {
                        if (column.AllowDBNull)
                        {
                            row[column] = DBNull.Value;
                        }
                        else
                        {
                            row[column] = column.DefaultValue;
                        }
                    }
                    else
                    {
                        column.Init(row.tempRecord);
                    }
                }
            }
            row.EndEdit();
        }
Example #7
0
        internal void LoadData(XmlReader reader)
        {
            this.dataReader = DataTextReader.CreateReader(reader);
            int  depth = this.dataReader.Depth;
            bool flag  = this.isTableLevel ? this.dataTable.EnforceConstraints : this.dataSet.EnforceConstraints;

            this.InitNameTable();
            if (this.nodeToSchemaMap == null)
            {
                this.nodeToSchemaMap = this.isTableLevel ? new XmlToDatasetMap(this.dataReader.NameTable, this.dataTable) : new XmlToDatasetMap(this.dataReader.NameTable, this.dataSet);
            }
            if (this.isTableLevel)
            {
                this.dataTable.EnforceConstraints = false;
            }
            else
            {
                this.dataSet.EnforceConstraints = false;
                this.dataSet.fInReadXml         = true;
            }
            if (this.topMostNode != null)
            {
                if (!this.isDiffgram && !this.isTableLevel)
                {
                    DataTable schemaForNode = this.nodeToSchemaMap.GetSchemaForNode(this.topMostNode, this.FIgnoreNamespace(this.topMostNode)) as DataTable;
                    if (schemaForNode != null)
                    {
                        this.LoadTopMostTable(schemaForNode);
                    }
                }
                this.topMostNode = null;
            }
            while (!this.dataReader.EOF)
            {
                if (this.dataReader.Depth < depth)
                {
                    break;
                }
                if (reader.NodeType != XmlNodeType.Element)
                {
                    this.dataReader.Read();
                }
                else
                {
                    DataTable tableForNode = this.nodeToSchemaMap.GetTableForNode(this.dataReader, this.FIgnoreNamespace(this.dataReader));
                    if (tableForNode == null)
                    {
                        if (!this.ProcessXsdSchema())
                        {
                            this.dataReader.Read();
                        }
                        continue;
                    }
                    this.LoadTable(tableForNode, false);
                }
            }
            if (this.isTableLevel)
            {
                this.dataTable.EnforceConstraints = flag;
            }
            else
            {
                this.dataSet.fInReadXml         = false;
                this.dataSet.EnforceConstraints = flag;
            }
        }
 internal void LoadData(XmlReader reader)
 {
     this.dataReader = DataTextReader.CreateReader(reader);
     int depth = this.dataReader.Depth;
     bool flag = this.isTableLevel ? this.dataTable.EnforceConstraints : this.dataSet.EnforceConstraints;
     this.InitNameTable();
     if (this.nodeToSchemaMap == null)
     {
         this.nodeToSchemaMap = this.isTableLevel ? new XmlToDatasetMap(this.dataReader.NameTable, this.dataTable) : new XmlToDatasetMap(this.dataReader.NameTable, this.dataSet);
     }
     if (this.isTableLevel)
     {
         this.dataTable.EnforceConstraints = false;
     }
     else
     {
         this.dataSet.EnforceConstraints = false;
         this.dataSet.fInReadXml = true;
     }
     if (this.topMostNode != null)
     {
         if (!this.isDiffgram && !this.isTableLevel)
         {
             DataTable schemaForNode = this.nodeToSchemaMap.GetSchemaForNode(this.topMostNode, this.FIgnoreNamespace(this.topMostNode)) as DataTable;
             if (schemaForNode != null)
             {
                 this.LoadTopMostTable(schemaForNode);
             }
         }
         this.topMostNode = null;
     }
     while (!this.dataReader.EOF)
     {
         if (this.dataReader.Depth < depth)
         {
             break;
         }
         if (reader.NodeType != XmlNodeType.Element)
         {
             this.dataReader.Read();
         }
         else
         {
             DataTable tableForNode = this.nodeToSchemaMap.GetTableForNode(this.dataReader, this.FIgnoreNamespace(this.dataReader));
             if (tableForNode == null)
             {
                 if (!this.ProcessXsdSchema())
                 {
                     this.dataReader.Read();
                 }
                 continue;
             }
             this.LoadTable(tableForNode, false);
         }
     }
     if (this.isTableLevel)
     {
         this.dataTable.EnforceConstraints = flag;
     }
     else
     {
         this.dataSet.fInReadXml = false;
         this.dataSet.EnforceConstraints = flag;
     }
 }
 internal void LoadData(XmlDocument xdoc)
 {
     if (xdoc.DocumentElement != null)
     {
         bool enforceConstraints;
         if (this.isTableLevel)
         {
             enforceConstraints = this.dataTable.EnforceConstraints;
             this.dataTable.EnforceConstraints = false;
         }
         else
         {
             enforceConstraints = this.dataSet.EnforceConstraints;
             this.dataSet.EnforceConstraints = false;
             this.dataSet.fInReadXml = true;
         }
         if (this.isTableLevel)
         {
             this.nodeToSchemaMap = new XmlToDatasetMap(this.dataTable, xdoc.NameTable);
         }
         else
         {
             this.nodeToSchemaMap = new XmlToDatasetMap(this.dataSet, xdoc.NameTable);
         }
         DataRow row = null;
         if (this.isTableLevel || ((this.dataSet != null) && this.dataSet.fTopLevelTable))
         {
             XmlElement documentElement = xdoc.DocumentElement;
             DataTable schemaForNode = (DataTable) this.nodeToSchemaMap.GetSchemaForNode(documentElement, this.FIgnoreNamespace(documentElement));
             if (schemaForNode != null)
             {
                 row = schemaForNode.CreateEmptyRow();
                 this.nodeToRowMap[documentElement] = row;
                 this.LoadRowData(row, documentElement);
                 schemaForNode.Rows.Add(row);
             }
         }
         this.LoadRows(row, xdoc.DocumentElement);
         this.AttachRows(row, xdoc.DocumentElement);
         if (this.isTableLevel)
         {
             this.dataTable.EnforceConstraints = enforceConstraints;
         }
         else
         {
             this.dataSet.fInReadXml = false;
             this.dataSet.EnforceConstraints = enforceConstraints;
         }
     }
 }
 private bool ProcessXsdSchema()
 {
     if ((this.dataReader.LocalName == this.XSD_SCHEMA) && (this.dataReader.NamespaceURI == this.XSDNS))
     {
         if (this.ignoreSchema)
         {
             this.dataReader.Skip();
         }
         else if (this.isTableLevel)
         {
             this.dataTable.ReadXSDSchema(this.dataReader, false);
             this.nodeToSchemaMap = new XmlToDatasetMap(this.dataReader.NameTable, this.dataTable);
         }
         else
         {
             this.dataSet.ReadXSDSchema(this.dataReader, false);
             this.nodeToSchemaMap = new XmlToDatasetMap(this.dataReader.NameTable, this.dataSet);
         }
     }
     else
     {
         if (((this.dataReader.LocalName != this.XDR_SCHEMA) || (this.dataReader.NamespaceURI != this.XDRNS)) && ((this.dataReader.LocalName != this.SQL_SYNC) || (this.dataReader.NamespaceURI != this.UPDGNS)))
         {
             return false;
         }
         this.dataReader.Skip();
     }
     return true;
 }