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); }
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; } } }
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 } }
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; } }
// 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. }
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(); }
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; }