Пример #1
0
        /// <summary>
        /// Reading DataSet from an XML file
        /// </summary>
        /// <param name="Path">XML File Path</param>
        /// <param name="XmlReadMode">Read Mode</param>
        /// <returns>Dataset</returns>
        public static DataSet ReadDataSetFromXML(string Path, XmlReadMode XmlReadMode)
        {
            DataSet ObjdataSet = new DataSet();

            ObjdataSet.ReadXml(Path, XmlReadMode);
            return(ObjdataSet);
        }
Пример #2
0
        public DataSet J_ConvertXmlToDataSet(string xmlPhysicalFilePath, XmlReadMode readMode)
        {
            DataSet J_DataSet = new DataSet();

            J_DataSet.ReadXml(xmlPhysicalFilePath, readMode);
            return(J_DataSet);
        }
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            var authHeader = actionContext.Request.Headers.Authorization;

            if (authHeader != null)
            {
                var authenticationToken        = actionContext.Request.Headers.Authorization.Parameter;
                var decodedAuthenticationToken = Encoding.UTF8.GetString(Convert.FromBase64String(authenticationToken));
                var usernamePasswordArray      = decodedAuthenticationToken.Split(':');
                var userName = usernamePasswordArray[0];
                var password = usernamePasswordArray[1];

                DataSet     ds          = new DataSet();
                XmlReadMode xmlReadMode = ds.ReadXml(Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, @"App_Data\UserInfo.xml"));
                var         lstUser     = ds.Tables[0].AsEnumerable().Select(dr => new Users {
                    UserName = dr.Field <string>("Name"), Password = dr.Field <string>("Password")
                }).ToList <Users>();

                Users usr = lstUser.Where <Users>(x => x.UserName.ToUpper() == userName.ToUpper() && x.Password == password).FirstOrDefault();

                if (usr != null)
                {
                    var principal = new GenericPrincipal(new GenericIdentity(usr.UserName), null);
                    Thread.CurrentPrincipal = principal;

                    actionContext.Response =
                        actionContext.Request.CreateResponse(HttpStatusCode.OK,
                                                             "User " + userName + " successfully authenticated");

                    return;
                }
            }
            HandleUnathorized(actionContext);
        }
Пример #4
0
        private void buttonGenerate_Click(object sender, EventArgs e)
        {
            string xml = _ctrlCSBMsg.GetXmlString();

            if (string.IsNullOrEmpty(xml))
            {
                return;
            }

            MSG.Message msg = XObjectManager.CreateObject <MSG.Message>(xml);
            if (msg == null)
            {
                MessageBox.Show(this, "Deserialize CSB DataSet Message failed. See the log file for details.", this.Text);
                return;
            }

            try
            {
                DataSet     ds = new DataSet();
                XmlReadMode m  = ds.ReadXml(XmlReader.Create(new StringReader(msg.Body)));
                this.dataGridViewDS.DataSource = ds.Tables[0];
            }
            catch (Exception err)
            {
                Program.Context.Log.Write(err);
                MessageBox.Show(this, "Deserialize DataSet XML failed. See the log file for details.\r\n\r\nMessage: " + err.Message, this.Text);
            }
        }
Пример #5
0
        private void button1_Click(object sender, EventArgs e)
        {
            DataSet     ds   = new DataSet();
            XmlReadMode mode = XmlReadMode.Auto;

            if (radioButton1.Checked)
            {
                mode = XmlReadMode.Auto;
            }
            if (radioButton2.Checked)
            {
                mode = XmlReadMode.DiffGram;
            }
            if (radioButton3.Checked)
            {
                mode = XmlReadMode.Fragment;
            }
            if (radioButton4.Checked)
            {
                mode = XmlReadMode.IgnoreSchema;
            }
            if (radioButton5.Checked)
            {
                mode = XmlReadMode.InferSchema;
            }
            if (radioButton6.Checked)
            {
                mode = XmlReadMode.ReadSchema;
            }
            ds.ReadXml(textBox1.Text, mode);
            MessageBox.Show("XML file read successfully!");
        }
Пример #6
0
        public XmlReadMode LoadData(XmlReader reader, XmlReadMode mode)
        {
            XmlReadMode Result = mode;

            switch (mode)
            {
            case XmlReadMode.Auto:
                Result = DSet.Tables.Count == 0 ? XmlReadMode.InferSchema : XmlReadMode.IgnoreSchema;
                ReadModeSchema(reader, DSet.Tables.Count == 0 ? XmlReadMode.Auto : XmlReadMode.IgnoreSchema);
                break;

            case XmlReadMode.InferSchema:
                Result = XmlReadMode.InferSchema;
                ReadModeSchema(reader, mode);
                break;

            case XmlReadMode.IgnoreSchema:
                Result = XmlReadMode.IgnoreSchema;
                ReadModeSchema(reader, mode);
                break;

            default:
                reader.Skip();
                break;
            }

            return(Result);
        }
Пример #7
0
        /// <summary>
        /// 将xml文件按照一定的模式格式化成DataSet
        /// </summary>
        /// <param name="fileName">xml文件名</param>
        /// <param name="xmlReadMode">XmlReadMode</param>
        /// <returns>DataSet格式数据</returns>
        public static DataSet GetDataSet(string fileName, XmlReadMode xmlReadMode)
        {
            DataSet dataSet = new DataSet();

            dataSet.ReadXml(fileName, xmlReadMode);

            return(dataSet);
        }
Пример #8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="vWriteToLog"></param>
        /// <param name="vFirstRunDone">This is the first time the app runs</param>
        /// <returns></returns>
        public DataSet ReadXML(String vSettingsFullPath)
        {
            DataSet output = new DataSet();

            if (System.IO.File.Exists(vSettingsFullPath))
            {
                TextReader    tr;
                XmlTextReader reader;

                tr     = new StreamReader(vSettingsFullPath);
                reader = new XmlTextReader(tr)
                {
                    DtdProcessing = DtdProcessing.Prohibit
                };

                try
                {
                    //XmlReadMode mode = output.ReadXml(settingsFullPath, XmlReadMode.ReadSchema);

                    XmlReadMode mode = output.ReadXml(reader, XmlReadMode.ReadSchema);
                    if (mode != XmlReadMode.ReadSchema)
                    {
                        //ErrorHandling.ProcessError(null, ErrorHandling.ErrorMessageType.XMLFileRead, true, false, string.Format(CultureInfo.InvariantCulture, ""), vSettingsFullPath);
                        //TODO: Error here
                    }
                }
                catch (FileLoadException ex)
                {
                    //FileFunctions.WriteToLog(MainFunctions.GetErrorLogFullPath(Properties.Settings.Default.Portable), "Error 008: Settings file is corrupt, a new one will be created.", vWriteToLog);
                    //MessageBox.Show("Error reading settings file (" + settingsFullPath +").\n\n" + ex.Message.ToString(CultureInfo.InvariantCulture));
                    //MessageBox.Show("Your Settings file (" + settingsFullPath + ") is corrupt.\n\n  A new one will be created.\n\nError: " + ex.Message, "Settings File Does Not Exist", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    //TODO: Error here
                    //ErrorHandling.ProcessError(ex, ErrorHandling.ErrorMessageType.ReadingSettingsXML, false, false, string.Format(CultureInfo.InvariantCulture, ""), vSettingsFullPath);
                    //throw;
                }
                catch (XmlException ex)
                {
                    //TODO: Error here
                    //ErrorHandling.ProcessError(ex, ErrorHandling.ErrorMessageType.ReadingSettingsXML, false, false, string.Format(CultureInfo.InvariantCulture, ""), vSettingsFullPath);
                    output = null; // no xml file loaded!
                }
                finally
                {
                    reader.Close();
                    //if (tr != null) tr.Close();
                }
            }
            else
            {
                // dont log an error if this is the first time the app has run, and needs to create the settings file
                //if (vFirstRunDone)
                //    ErrorHandling.ProcessError(null, ErrorHandling.ErrorMessageType.SettingsNotFound, false, false, string.Format(CultureInfo.InvariantCulture, ""), vSettingsFullPath);
                //FileFunctions.WriteToLog(MainFunctions.GetErrorLogFullPath(Properties.Settings.Default.Portable), "Warning 001: Settings file not found, a new one will be created.", vWriteToLog);
                //MessageBox.Show("This is your first time running LAWC.\n\n  A new settings file will be created (" + settingsFullPath + ").", "Settings File Does Not Exist", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

            return(output);
        }
Пример #9
0
        virtual public void FromXml(string xml, XmlReadMode mode)
        {
            DataSet      dataSet = new DataSet();
            StringReader reader  = new StringReader(xml);

            dataSet.ReadXml(reader, mode);
            this.DataTable = dataSet.Tables[0];
            dataSet.Tables.Clear();
        }
Пример #10
0
        public XmlReadMode ReadXml(Stream stream, XmlReadMode mode)
        {
            XmlReader reader = XmlReader.Create(stream);

            this.Clear();
            ReadXml(reader);

            return(mode);
        }
Пример #11
0
        /// <summary>
        /// 将xml文件流按照一定的模式格式化成DataSet
        /// </summary>
        /// <param name="stream">xml文件流</param>
        /// <param name="xmlReadMode">XmlReadMode</param>
        /// <returns>DataSet格式数据</returns>
        public static DataSet GetDataSet(Stream stream, XmlReadMode xmlReadMode)
        {
            DataSet   dataSet = new DataSet();
            DataTable DT      = new DataTable();

            dataSet.ReadXml(stream, xmlReadMode);

            return(dataSet);
        }
Пример #12
0
        public XmlReadMode ReadXml(TextReader reader, XmlReadMode mode)
        {
            if (reader is StreamReader)
            {
                StreamReader sreader = (StreamReader)reader;
                return(ReadXml(sreader.BaseStream, mode));
            }

            throw new Exception($"{nameof(DataLake)} reader({reader.GetType().FullName}) is not {nameof(StreamReader)}");
        }
Пример #13
0
        private void btnSiguiente_Click(object sender, EventArgs e)

        {
            if (tbRespuesta.Text == 3)
            {
                this.Hide();
                Form4 x = new Form4();
                XmlReadMode.ShowDialog();
            }
        }
Пример #14
0
        /// <summary>
        /// XML字符串转成DataSet
        /// </summary>
        /// <param name="xml">xml字符串</param>
        /// <param name="mode">指定如何将 XML 数据和关系架构读入 System.Data.DataSet</param>
        /// <returns></returns>
        public static DataSet XMLToDataSet(string xml, XmlReadMode mode)
        {
            DataSet ds = new DataSet();

            using (MemoryStream stm = new MemoryStream())
            {
                byte[] buffer = System.Text.Encoding.UTF8.GetBytes(xml);
                stm.Write(buffer, 0, buffer.Length);
                stm.Position = 0;
                ds.ReadXml(stm, mode);
            }
            return(ds);
        }
Пример #15
0
        private XmlDataInferenceLoader(DataSet ds, XmlDocument doc, XmlReadMode mode, string [] ignoredNamespaces)
        {
            dataset   = ds;
            document  = doc;
            this.mode = mode;
            this.ignoredNamespaces = ignoredNamespaces != null ? new ArrayList(ignoredNamespaces) : new ArrayList();

            // Fill existing table info
            foreach (DataTable dt in dataset.Tables)
            {
                tables.Add(new TableMapping(dt));
            }
        }
Пример #16
0
        public static DataSet LoadDataSetFromFile(string filename)
        {
            DataSet ds = new DataSet();

            try
            {
                XmlReadMode xrm = ds.ReadXml(filename);
            }
            catch (Exception e)
            {
                MessageBox.Show("读取文件出错:" + e.Message);
            }
            return(ds);
        }
Пример #17
0
        public static DataTable LoadTableFromFile(string filename)
        {
            DataTable data = new DataTable();

            try
            {
                XmlReadMode xrm = data.ReadXml(filename);
            }
            catch (Exception e)
            {
                MessageBox.Show("读取文件出错:" + e.Message);
            }
            return(data);
        }
Пример #18
0
        // a bit detailed version
        public static void AssertReadXml(DataSet ds, string label, string xml, XmlReadMode readMode, XmlReadMode resultMode, string datasetName, int tableCount, ReadState state, string readerLocalName, string readerNS)
        {
            XmlReader xtr = new XmlTextReader(xml, XmlNodeType.Element, null);

            Assert.Equal(resultMode, ds.ReadXml(xtr, readMode));
            AssertDataSet(label + ".dataset", ds, datasetName, tableCount, -1);
            Assert.Equal(state, xtr.ReadState);
            if (readerLocalName != null)
            {
                Assert.Equal(readerLocalName, xtr.LocalName);
            }
            if (readerNS != null)
            {
                Assert.Equal(readerNS, xtr.NamespaceURI);
            }
        }
        public void Load(string fileName, DataSet ds, XmlReadMode readMode = XmlReadMode.IgnoreSchema)
        {
            string ext = Path.GetExtension(fileName);

            if (ext == ".xml")
            {
                ds.ReadXml(fileName, readMode);
                FillCollections(ds);
            }
            else
            {
                throw new Exception(
                          "Сховище не підтримує завантаження "
                          + "з файлу формату " + ext.ToUpper());
            }
        }
Пример #20
0
        static public bool ReadPlog(String filename, DataTable messageTable, DataTable metaTable, out String lastError)
        {
            lastError = "";

            if (!File.Exists(filename))
            {
                lastError = String.Format("Cannot find file: {0}", filename);
                return(false);
            }

            // Чтение файла
            String      fullTableFilter = messageTable.DefaultView.RowFilter;
            XmlReadMode readMode        = XmlReadMode.Auto;
            DataSet     dataset         = new DataSet();

            dataset.Tables.Add(metaTable);
            dataset.Tables.Add(messageTable);
            readMode = dataset.ReadXml(filename);
            dataset.Tables.Clear();
            //При добавлении таблицы в DataSet у ней сбрасывается DataView
            messageTable.DefaultView.RowFilter = fullTableFilter;
            messageTable.DefaultView.AllowNew  = false;

            if (readMode == XmlReadMode.IgnoreSchema)
            {
                lastError = "Incorrect log format";
                return(false);
            }

            // Проверка версии
            int    version     = 0;
            object plogVersion = metaTable.Rows[0][DataColumnNames.PlogVersion];

            int.TryParse(plogVersion.ToString(), out version);
            if (version <= 0 || version > DataTableUtils.PlogVersion)
            {
                lastError = "Incorrect version of plog-file";
                return(false);
            }
            else if (version > 0 && version < DataTableUtils.PlogVersion)
            {
                DataTableUtils.UpgradePlog(messageTable, metaTable, filename);
            }

            return(true);
        }
Пример #21
0
        private void buttonGenDS_Click(object sender, EventArgs e)
        {
            string xml = _ctrlCSBMsg.GetXmlString();

            if (string.IsNullOrEmpty(xml))
            {
                return;
            }

            MSG.Message msg = XObjectManager.CreateObject <MSG.Message>(xml);
            if (msg == null)
            {
                MessageBox.Show(this, "Deserialize CSB DataSet Message failed. See the log file for details.", this.Text);
                return;
            }

            try
            {
                DataSet     ds = new DataSet();
                XmlReadMode m  = ds.ReadXml(XmlReader.Create(new StringReader(msg.Body)));
                //MessageBox.Show(this, string.Format(
                //        "Data Set Name: {0}\r\n" +
                //        "Table Count: {1}\r\n" +
                //        "Row Count: {2}\r\n",
                //        ds.DataSetName,
                //        ds.Tables.Count,
                //        (ds.Tables.Count > 0) ? ds.Tables[0].Rows.Count : 0),
                //   m.ToString());

                if (ds.Tables.Count > 0)
                {
                    this.dataGridViewDS.DataSource = ds.Tables[0];
                    this.labelDSName.Text          = ds.DataSetName + " (" + ds.Tables[0].Rows.Count + ")";
                }
                else
                {
                    this.dataGridViewDS.DataSource = null;
                    this.labelDSName.Text          = ds.DataSetName + " (0)";
                }
            }
            catch (Exception err)
            {
                Program.Log.Write(err);
                MessageBox.Show(this, "Deserialize DataSet XML failed. See the log file for details.\r\n\r\nMessage: " + err.Message, this.Text);
            }
        }
Пример #22
0
 private DataSet GenerateCSBrokerDataSet(string csbDataSetXml)
 {
     try
     {
         _entity.Context.Log.Write("Begin deserialize CS Broker DataSet.");
         DataSet     ds = new DataSet();
         XmlReadMode m  = ds.ReadXml(XmlReader.Create(new StringReader(csbDataSetXml)));
         _entity.Context.Log.Write(string.Format("Finish deserialize CS Broker DataSet. Name: {0}, RowCount: {1}, XmlReadMode: {2}.",
                                                 ds.DataSetName, ds.Tables.Count > 0 ? ds.Tables[0].Rows.Count : -1, m));
         return(ds);
     }
     catch (Exception err)
     {
         _entity.Context.Log.Write(err);
         return(null);
     }
 }
Пример #23
0
		/// <summary>
		/// 将指定的 XML 数据载入到 DataSet 中.
		/// </summary>
		/// <param name="dataSet">要载入数据的 DataSet.</param>
		/// <param name="xmlFilePath">XML 文件路径.</param>
		/// <param name="isClear">当指定 XML 文件存在时, 是否清空原有数据.</param>
		/// <param name="mode">读取模式.</param>
		public static void Load ( DataSet dataSet, string xmlFilePath, bool isClear, XmlReadMode mode )
#endif
		{

			try
			{

				if ( null == dataSet || string.IsNullOrEmpty ( xmlFilePath ) || !File.Exists ( xmlFilePath ) )
					return;

				if ( isClear )
					dataSet.Clear ();

				dataSet.ReadXml ( xmlFilePath, mode );
			}
			catch { }

		}
Пример #24
0
        public static List <T> GetKeyValueData <T>(string dataCategory) where T : class, new()
        {
            List <KeyValueDataAccessSetting> list    = KeyValueDataAccessSettingManager.GetAllSettings();
            KeyValueDataAccessSetting        setting = list.Find(f => f.DataCategory.ToUpper().Trim() == dataCategory.Trim().ToUpper());

            if (setting == null)
            {
                throw new NullReferenceException("没有找到" + dataCategory + "在KeyValueDataAccessSetting.config中的配置!");
            }

            if (!m_CacheData.ContainsKey(dataCategory.ToUpper().Trim()))
            {
                string xmlFileFullPath = Path.Combine(GetBaseFolderPath(), setting.DataCategoryPath, setting.DataCategory + ".xml");
                if (!File.Exists(xmlFileFullPath))
                {
                    return(null);
                }
                DataTable dt = null;
                try
                {
                    DataSet     ds   = new DataSet();
                    XmlReadMode mode = ds.ReadXml(xmlFileFullPath, XmlReadMode.ReadSchema);
                    dt = ds.Tables[0];
                }
                catch (Exception)
                {
                    return(null);
                }
                if (dt != null)
                {
                    List <T> tlist = BuildEntityListFromDataTable <T>(dt);
                    m_CacheData.Add(dataCategory.ToUpper().Trim(), tlist);
                    return(tlist);
                }
                return(null);
            }
            else
            {
                lock (m_SyncObj)
                {
                    return((List <T>)m_CacheData[dataCategory.ToUpper().Trim()]);
                }
            }
        }
        internal static DataSet ImportWebsites(String vFilePath, String vSettingsFullPath)
        {
            //String settingsFullPath = MainFunctions.GetSettingsFullPath(); // Application.StartupPath + "\\" + vSettingsFilename; // read file from app path
            DataSet output = new DataSet();

            if (System.IO.File.Exists(vFilePath))
            {
                try
                {
                    //XmlReadMode mode = output.ReadXml(vFilePath, XmlReadMode.ReadSchema);

                    TextReader    tr     = new StreamReader(vFilePath);
                    XmlTextReader reader = new XmlTextReader(tr)
                    {
                        DtdProcessing = DtdProcessing.Prohibit
                    };

                    XmlReadMode mode = output.ReadXml(reader, XmlReadMode.ReadSchema);



                    if (mode != XmlReadMode.ReadSchema)
                    {
                        ErrorHandling.ProcessError(null, ErrorHandling.ErrorMessageType.XMLFileRead, true, false, string.Format(CultureInfo.InvariantCulture, ""), vSettingsFullPath);
                    }
                }
                catch (IOException ex)
                {
                    //FileFunctions.WriteToLog(MainFunctions.GetErrorLogFullPath(Properties.Settings.Default.Portable), "Error 008: Website List file is corrupt.", true);
                    //MessageBox.Show("Unable to read the XML file.\n\nError: " + ex.Message, "Import Websites Problem", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    ErrorHandling.ProcessError(ex, ErrorHandling.ErrorMessageType.XMLFileRead, true, false, string.Format(CultureInfo.InvariantCulture, ""), vSettingsFullPath);
                    //throw;
                }
            }
            else
            {
                ErrorHandling.ProcessError(null, ErrorHandling.ErrorMessageType.WebsiteListNotFound, true, false, string.Format(CultureInfo.InvariantCulture, ""), vSettingsFullPath);

                //FileFunctions.WriteToLog(MainFunctions.GetErrorLogFullPath(Properties.Settings.Default.Portable), "Warning 001: Website List file not found", true);
                //MessageBox.Show("This is your first time running LAWC.\n\n  A new settings file will be created (" + settingsFullPath + ").", "Settings File Does Not Exist", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

            return(output);
        }
Пример #26
0
        /// <summary>
        /// 从DataSet Xml 配置文件中获取 DataTable.
        /// </summary>
        /// <param name="file">完全限定路径配置文件。</param>
        /// <returns>DataTable数据集。</returns>
        public static DataTable LoadXmlDataTable(string file)
        {
            // if file does not exist, no log
            if (!File.Exists(file))
            {
                return(null);
            }

            try
            {
                DataSet     ds   = new DataSet();
                XmlReadMode mode = ds.ReadXml(file, XmlReadMode.ReadSchema);
                return(ds.Tables[0]);
            }
            catch (Exception)
            {
                return(null);
            }
        }
Пример #27
0
        /// <summary>
        /// 将指定的 XML 数据载入到 DataSet 中.
        /// </summary>
        /// <param name="dataSet">要载入数据的 DataSet.</param>
        /// <param name="xmlFilePath">XML 文件路径.</param>
        /// <param name="isClear">当指定 XML 文件存在时, 是否清空原有数据.</param>
        /// <param name="mode">读取模式.</param>
        public static void Load(DataSet dataSet, string xmlFilePath, bool isClear, XmlReadMode mode)
#endif
        {
            try
            {
                if (null == dataSet || string.IsNullOrEmpty(xmlFilePath) || !File.Exists(xmlFilePath))
                {
                    return;
                }

                if (isClear)
                {
                    dataSet.Clear();
                }

                dataSet.ReadXml(xmlFilePath, mode);
            }
            catch { }
        }
Пример #28
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (!System.IO.File.Exists(textBox1.Text))
            {
                MessageBox.Show("Invalid source file name");
                return;
            }

            DataSet     ds   = new DataSet();
            XmlReadMode mode = XmlReadMode.Auto;

            if (radioButton1.Checked)
            {
                mode = XmlReadMode.Auto;
            }
            if (radioButton2.Checked)
            {
                mode = XmlReadMode.DiffGram;
            }
            if (radioButton3.Checked)
            {
                mode = XmlReadMode.Fragment;
            }
            if (radioButton4.Checked)
            {
                mode = XmlReadMode.IgnoreSchema;
            }
            if (radioButton5.Checked)
            {
                mode = XmlReadMode.InferSchema;
            }
            if (radioButton6.Checked)
            {
                mode = XmlReadMode.ReadSchema;
            }
            ds.ReadXml(textBox1.Text, mode);
            MessageBox.Show("XML file read successfully!");
        }
Пример #29
0
		public XmlReadMode LoadData (XmlReader reader, XmlReadMode mode)
		{
			XmlReadMode Result = mode;

			switch (mode) {
			case XmlReadMode.Auto:
				Result = DSet.Tables.Count == 0 ? XmlReadMode.InferSchema : XmlReadMode.IgnoreSchema;
				ReadModeSchema (reader, DSet.Tables.Count == 0 ? XmlReadMode.Auto : XmlReadMode.IgnoreSchema);
				break;
			case XmlReadMode.InferSchema:
				Result = XmlReadMode.InferSchema;
				ReadModeSchema (reader, mode);
				break;
			case XmlReadMode.IgnoreSchema:
				Result = XmlReadMode.IgnoreSchema;
				ReadModeSchema (reader, mode);
				break;
			default:
				reader.Skip ();
				break;
			}

			return Result;
		}
Пример #30
0
        // ***************************************************************************


        // ***************************************************************************
        // Read and display the specified XML file and loads it into a DataSet
        void LoadAndDisplay(string fileName)
        {
            // Display the XML source in a textbox
            StreamReader fr = new StreamReader(fileName);

            Data.Text = fr.ReadToEnd();
            fr.Close();

            // Load a DataSet
            XmlReadMode mode = (XmlReadMode)Enum.Parse(typeof(XmlReadMode), ReadMode.SelectedItem.ToString());
            DataSet     ds   = new DataSet();
            XmlReadMode used = ds.ReadXml(fileName, mode);

            // Show the DataSet
            grid.DataSource = ds;
            ModeUsed.Text   = "Used \"" + used.ToString() + "\"";

            // Show the recognized (and used) schema
            StringWriter writer = new StringWriter();

            ds.WriteXmlSchema(writer);
            FinalSchema.Text = writer.ToString();
            writer.Close();
        }
 internal void InferSchema(XmlDocument xdoc, string[] excludedNamespaces, XmlReadMode mode)
 {
     IntPtr ptr;
     Bid.ScopeEnter(out ptr, "<ds.DataSet.InferSchema|INFO> %d#, mode=%d{ds.XmlReadMode}\n", this.ObjectID, (int) mode);
     try
     {
         string namespaceURI = xdoc.DocumentElement.NamespaceURI;
         if (excludedNamespaces == null)
         {
             excludedNamespaces = new string[0];
         }
         XmlNodeReader instanceDocument = new XmlIgnoreNamespaceReader(xdoc, excludedNamespaces);
         XmlSchemaInference inference = new XmlSchemaInference {
             Occurrence = XmlSchemaInference.InferenceOption.Relaxed
         };
         if (mode == XmlReadMode.InferTypedSchema)
         {
             inference.TypeInference = XmlSchemaInference.InferenceOption.Restricted;
         }
         else
         {
             inference.TypeInference = XmlSchemaInference.InferenceOption.Relaxed;
         }
         XmlSchemaSet schemaSet = inference.InferSchema(instanceDocument);
         schemaSet.Compile();
         XSDSchema schema = new XSDSchema {
             FromInference = true
         };
         try
         {
             schema.LoadSchema(schemaSet, this);
         }
         finally
         {
             schema.FromInference = false;
         }
     }
     finally
     {
         Bid.ScopeLeave(ref ptr);
     }
 }
 public XmlReadMode ReadXml(XmlReader reader, XmlReadMode mode)
 {
     return this.ReadXml(reader, mode, false);
 }
 internal XmlReadMode ReadXml(XmlReader reader, XmlReadMode mode, bool denyResolving)
 {
     XmlReadMode mode3;
     IntPtr ptr;
     Bid.ScopeEnter(out ptr, "<ds.DataSet.ReadXml|INFO> %d#, mode=%d{ds.XmlReadMode}, denyResolving=%d{bool}\n", this.ObjectID, (int) mode, denyResolving);
     try
     {
         bool flag2 = false;
         bool flag3 = false;
         bool isXdr = false;
         int depth = -1;
         XmlReadMode diffGram = mode;
         if (reader == null)
         {
             return diffGram;
         }
         if (mode == XmlReadMode.Auto)
         {
             return this.ReadXml(reader);
         }
         if (reader is XmlTextReader)
         {
             ((XmlTextReader) reader).WhitespaceHandling = WhitespaceHandling.Significant;
         }
         XmlDocument xdoc = new XmlDocument();
         if ((mode != XmlReadMode.Fragment) && (reader.NodeType == XmlNodeType.Element))
         {
             depth = reader.Depth;
         }
         reader.MoveToContent();
         XmlDataLoader loader = null;
         if (reader.NodeType == XmlNodeType.Element)
         {
             XmlElement topNode = null;
             if (mode == XmlReadMode.Fragment)
             {
                 xdoc.AppendChild(xdoc.CreateElement("ds_sqlXmlWraPPeR"));
                 topNode = xdoc.DocumentElement;
             }
             else
             {
                 if ((reader.LocalName == "diffgram") && (reader.NamespaceURI == "urn:schemas-microsoft-com:xml-diffgram-v1"))
                 {
                     if ((mode == XmlReadMode.DiffGram) || (mode == XmlReadMode.IgnoreSchema))
                     {
                         this.ReadXmlDiffgram(reader);
                         this.ReadEndElement(reader);
                         return diffGram;
                     }
                     reader.Skip();
                     return diffGram;
                 }
                 if ((reader.LocalName == "Schema") && (reader.NamespaceURI == "urn:schemas-microsoft-com:xml-data"))
                 {
                     if (((mode != XmlReadMode.IgnoreSchema) && (mode != XmlReadMode.InferSchema)) && (mode != XmlReadMode.InferTypedSchema))
                     {
                         this.ReadXDRSchema(reader);
                         return diffGram;
                     }
                     reader.Skip();
                     return diffGram;
                 }
                 if ((reader.LocalName == "schema") && (reader.NamespaceURI == "http://www.w3.org/2001/XMLSchema"))
                 {
                     if (((mode != XmlReadMode.IgnoreSchema) && (mode != XmlReadMode.InferSchema)) && (mode != XmlReadMode.InferTypedSchema))
                     {
                         this.ReadXSDSchema(reader, denyResolving);
                         return diffGram;
                     }
                     reader.Skip();
                     return diffGram;
                 }
                 if ((reader.LocalName == "schema") && reader.NamespaceURI.StartsWith("http://www.w3.org/", StringComparison.Ordinal))
                 {
                     throw ExceptionBuilder.DataSetUnsupportedSchema("http://www.w3.org/2001/XMLSchema");
                 }
                 topNode = xdoc.CreateElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
                 if (reader.HasAttributes)
                 {
                     int attributeCount = reader.AttributeCount;
                     for (int i = 0; i < attributeCount; i++)
                     {
                         reader.MoveToAttribute(i);
                         if (reader.NamespaceURI.Equals("http://www.w3.org/2000/xmlns/"))
                         {
                             topNode.SetAttribute(reader.Name, reader.GetAttribute(i));
                         }
                         else
                         {
                             XmlAttribute attribute = topNode.SetAttributeNode(reader.LocalName, reader.NamespaceURI);
                             attribute.Prefix = reader.Prefix;
                             attribute.Value = reader.GetAttribute(i);
                         }
                     }
                 }
                 reader.Read();
             }
             while (this.MoveToElement(reader, depth))
             {
                 if ((reader.LocalName == "Schema") && (reader.NamespaceURI == "urn:schemas-microsoft-com:xml-data"))
                 {
                     if (((!flag2 && !flag3) && ((mode != XmlReadMode.IgnoreSchema) && (mode != XmlReadMode.InferSchema))) && (mode != XmlReadMode.InferTypedSchema))
                     {
                         this.ReadXDRSchema(reader);
                         flag2 = true;
                         isXdr = true;
                     }
                     else
                     {
                         reader.Skip();
                     }
                 }
                 else
                 {
                     if ((reader.LocalName == "schema") && (reader.NamespaceURI == "http://www.w3.org/2001/XMLSchema"))
                     {
                         if (((mode != XmlReadMode.IgnoreSchema) && (mode != XmlReadMode.InferSchema)) && (mode != XmlReadMode.InferTypedSchema))
                         {
                             this.ReadXSDSchema(reader, denyResolving);
                             flag2 = true;
                         }
                         else
                         {
                             reader.Skip();
                         }
                         continue;
                     }
                     if ((reader.LocalName == "diffgram") && (reader.NamespaceURI == "urn:schemas-microsoft-com:xml-diffgram-v1"))
                     {
                         if ((mode == XmlReadMode.DiffGram) || (mode == XmlReadMode.IgnoreSchema))
                         {
                             this.ReadXmlDiffgram(reader);
                             diffGram = XmlReadMode.DiffGram;
                         }
                         else
                         {
                             reader.Skip();
                         }
                         continue;
                     }
                     if ((reader.LocalName == "schema") && reader.NamespaceURI.StartsWith("http://www.w3.org/", StringComparison.Ordinal))
                     {
                         throw ExceptionBuilder.DataSetUnsupportedSchema("http://www.w3.org/2001/XMLSchema");
                     }
                     if (mode == XmlReadMode.DiffGram)
                     {
                         reader.Skip();
                     }
                     else
                     {
                         flag3 = true;
                         if ((mode == XmlReadMode.InferSchema) || (mode == XmlReadMode.InferTypedSchema))
                         {
                             XmlNode newChild = xdoc.ReadNode(reader);
                             topNode.AppendChild(newChild);
                             continue;
                         }
                         if (loader == null)
                         {
                             loader = new XmlDataLoader(this, isXdr, topNode, mode == XmlReadMode.IgnoreSchema);
                         }
                         loader.LoadData(reader);
                     }
                 }
             }
             this.ReadEndElement(reader);
             xdoc.AppendChild(topNode);
             if (loader == null)
             {
                 loader = new XmlDataLoader(this, isXdr, mode == XmlReadMode.IgnoreSchema);
             }
             if (mode == XmlReadMode.DiffGram)
             {
                 return diffGram;
             }
             if ((mode == XmlReadMode.InferSchema) || (mode == XmlReadMode.InferTypedSchema))
             {
                 this.InferSchema(xdoc, null, mode);
                 diffGram = XmlReadMode.InferSchema;
                 loader.FromInference = true;
                 try
                 {
                     loader.LoadData(xdoc);
                 }
                 finally
                 {
                     loader.FromInference = false;
                 }
             }
         }
         mode3 = diffGram;
     }
     finally
     {
         Bid.ScopeLeave(ref ptr);
     }
     return mode3;
 }
Пример #34
0
		private XmlReadMode ReadXmlReadSchema (XmlReader input, XmlReadMode mode, bool checkRecurse)
		{
			if (input.LocalName == "schema" &&
				input.NamespaceURI == XmlSchema.Namespace) {
				ReadXmlSchema (input);
			}
			else if (checkRecurse && !input.IsEmptyElement) {
				int depth = input.Depth;
				input.Read ();
				input.MoveToContent ();
				ReadXmlReadSchema (input, mode, false);
				while (input.Depth > depth)
					input.Skip ();
				if (input.NodeType == XmlNodeType.EndElement)
					input.ReadEndElement ();
			}
			else
				input.Skip ();
			input.MoveToContent ();
			return XmlReadMode.ReadSchema;
		}
Пример #35
0
		private XmlDataInferenceLoader (DataSet ds, XmlDocument doc, XmlReadMode mode, string [] ignoredNamespaces)
		{
			dataset = ds;
			document = doc;
			this.mode = mode;
			this.ignoredNamespaces = ignoredNamespaces != null ? new ArrayList (ignoredNamespaces) : new ArrayList ();

			// Fill existing table info
			foreach (DataTable dt in dataset.Tables)
				tables.Add (new TableMapping (dt));
		}
Пример #36
0
		public XmlReadMode ReadXml (TextReader reader, XmlReadMode mode)
		{
			return ReadXml (new XmlTextReader (reader), mode);
		}
Пример #37
0
		public static void ReadXml (
			DataSet dataset, XmlReader reader, XmlReadMode mode)
		{
			new XmlDataReader (dataset, reader, mode).Process ();
		}
Пример #38
0
        /// <devdoc>
        /// </devdoc>
        public XmlReadMode ReadXml(Stream stream, XmlReadMode mode)
        {
            if (stream == null)
                return XmlReadMode.Auto;

            XmlTextReader reader = (mode == XmlReadMode.Fragment) ? new XmlTextReader(stream, XmlNodeType.Element, null) : new XmlTextReader(stream);
            // Prevent Dtd entity in dataset 
            reader.XmlResolver = null;
            return ReadXml(reader, mode, false);
        }
		public void AssertReadXml (DataSet ds, string label, string xml, XmlReadMode readMode, XmlReadMode resultMode, string datasetName, int tableCount, ReadState state)
		{
			AssertReadXml (ds, label, xml, readMode, resultMode, datasetName, tableCount, state, null, null);
		}
Пример #40
0
        internal XmlReadMode ReadXml(XmlReader reader, XmlReadMode mode, bool denyResolving)
        {
            IntPtr hscp;
            Bid.ScopeEnter(out hscp, "<ds.DataSet.ReadXml|INFO> %d#, mode=%d{ds.XmlReadMode}, denyResolving=%d{bool}\n", ObjectID, (int)mode, denyResolving);
            try {

                XmlReadMode ret = mode;

                if (reader == null)
                    return ret;

                if (mode == XmlReadMode.Auto) {
                    // Dev11 915079: nested ReadXml calls on the same DataSet must be done outside of RowDiffIdUsage scope
                    return ReadXml(reader);
                }

                DataTable.DSRowDiffIdUsageSection rowDiffIdUsage = new DataTable.DSRowDiffIdUsageSection();
                try {

                    bool fSchemaFound = false;
                    bool fDataFound = false;
                    bool fIsXdr = false;
                    int iCurrentDepth = -1;

                    // Dev11 904428: prepare and cleanup rowDiffId hashtable
                    rowDiffIdUsage.Prepare(this);

                    if (reader is XmlTextReader)
                        ((XmlTextReader)reader).WhitespaceHandling = WhitespaceHandling.Significant;

                    XmlDocument xdoc = new XmlDocument(); // we may need this to infer the schema

                    if ((mode != XmlReadMode.Fragment) && (reader.NodeType == XmlNodeType.Element))
                        iCurrentDepth = reader.Depth;

                    reader.MoveToContent();
                    XmlDataLoader xmlload = null;

                    if (reader.NodeType == XmlNodeType.Element) {
                        XmlElement topNode = null;
                        if (mode == XmlReadMode.Fragment) {
                            xdoc.AppendChild(xdoc.CreateElement("ds_sqlXmlWraPPeR"));
                            topNode = xdoc.DocumentElement;
                        }
                        else { //handle the top node
                            if ((reader.LocalName == Keywords.DIFFGRAM) && (reader.NamespaceURI == Keywords.DFFNS)) {
                                if ((mode == XmlReadMode.DiffGram) || (mode == XmlReadMode.IgnoreSchema)) {
                                    this.ReadXmlDiffgram(reader);
                                    // read the closing tag of the current element
                                    ReadEndElement(reader);
                                }
                                else {
                                    reader.Skip();
                                }
                                return ret;
                            }

                            if (reader.LocalName == Keywords.XDR_SCHEMA && reader.NamespaceURI == Keywords.XDRNS) {
                                // load XDR schema and exit
                                if ((mode != XmlReadMode.IgnoreSchema) && (mode != XmlReadMode.InferSchema) &&
                                    (mode != XmlReadMode.InferTypedSchema))
                                {
                                    ReadXDRSchema(reader);
                                }
                                else {
                                    reader.Skip();
                                }
                                return ret; //since the top level element is a schema return
                            }

                            if (reader.LocalName == Keywords.XSD_SCHEMA && reader.NamespaceURI == Keywords.XSDNS) {
                                // load XSD schema and exit
                                if ((mode != XmlReadMode.IgnoreSchema) && (mode != XmlReadMode.InferSchema) &&
                                    (mode != XmlReadMode.InferTypedSchema))
                                {
                                    ReadXSDSchema(reader, denyResolving);
                                }
                                else
                                    reader.Skip();
                                return ret; //since the top level element is a schema return
                            }

                            if (reader.LocalName == Keywords.XSD_SCHEMA && reader.NamespaceURI.StartsWith(Keywords.XSD_NS_START, StringComparison.Ordinal))
                                throw ExceptionBuilder.DataSetUnsupportedSchema(Keywords.XSDNS);

                            // now either the top level node is a table and we load it through dataReader...
                            // ... or backup the top node and all its attributes
                            topNode = xdoc.CreateElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
                            if (reader.HasAttributes) {
                                int attrCount = reader.AttributeCount;
                                for (int i = 0; i < attrCount; i++) {
                                    reader.MoveToAttribute(i);
                                    if (reader.NamespaceURI.Equals(Keywords.XSD_XMLNS_NS))
                                        topNode.SetAttribute(reader.Name, reader.GetAttribute(i));
                                    else {
                                        XmlAttribute attr = topNode.SetAttributeNode(reader.LocalName, reader.NamespaceURI);
                                        attr.Prefix = reader.Prefix;
                                        attr.Value = reader.GetAttribute(i);
                                    }
                                }
                            }
                            reader.Read();
                        }

                        while (MoveToElement(reader, iCurrentDepth)) {

                            if (reader.LocalName == Keywords.XDR_SCHEMA && reader.NamespaceURI == Keywords.XDRNS) {
                                // load XDR schema
                                if (!fSchemaFound && !fDataFound && (mode != XmlReadMode.IgnoreSchema) && (mode != XmlReadMode.InferSchema) &&
                                    (mode != XmlReadMode.InferTypedSchema))
                                {
                                    ReadXDRSchema(reader);
                                    fSchemaFound = true;
                                    fIsXdr = true;
                                }
                                else {
                                    reader.Skip();
                                }
                                continue;
                            }

                            if (reader.LocalName == Keywords.XSD_SCHEMA && reader.NamespaceURI == Keywords.XSDNS) {
                                // load XSD schema and exit
                                if ((mode != XmlReadMode.IgnoreSchema) && (mode != XmlReadMode.InferSchema) &&
                                    (mode != XmlReadMode.InferTypedSchema))
                                {
                                    ReadXSDSchema(reader, denyResolving);
                                    fSchemaFound = true;
                                }
                                else {
                                    reader.Skip();
                                }
                                continue;
                            }

                            if ((reader.LocalName == Keywords.DIFFGRAM) && (reader.NamespaceURI == Keywords.DFFNS)) {
                                if ((mode == XmlReadMode.DiffGram) || (mode == XmlReadMode.IgnoreSchema)) {
                                    this.ReadXmlDiffgram(reader);
                                    ret = XmlReadMode.DiffGram;
                                }
                                else {
                                    reader.Skip();
                                }
                                continue;
                            }

                            if (reader.LocalName == Keywords.XSD_SCHEMA && reader.NamespaceURI.StartsWith(Keywords.XSD_NS_START, StringComparison.Ordinal))
                                throw ExceptionBuilder.DataSetUnsupportedSchema(Keywords.XSDNS);

                            if (mode == XmlReadMode.DiffGram) {
                                reader.Skip();
                                continue; // we do not read data in diffgram mode
                            }

                            // if we are here we found some data
                            fDataFound = true;

                            if (mode == XmlReadMode.InferSchema || mode == XmlReadMode.InferTypedSchema) { //save the node in DOM until the end;
                                XmlNode node = xdoc.ReadNode(reader);
                                topNode.AppendChild(node);
                            }
                            else {
                                if (xmlload == null)
                                    xmlload = new XmlDataLoader(this, fIsXdr, topNode, mode == XmlReadMode.IgnoreSchema);
                                xmlload.LoadData(reader);
                            }
                        } //end of the while

                        // read the closing tag of the current element
                        ReadEndElement(reader);

                        // now top node contains the data part
                        xdoc.AppendChild(topNode);
                        if (xmlload == null)
                            xmlload = new XmlDataLoader(this, fIsXdr, mode == XmlReadMode.IgnoreSchema);

                        if (mode == XmlReadMode.DiffGram) {
                            // we already got the diffs through XmlReader interface
                            return ret;
                        }

                        // Load Data
                        if (mode == XmlReadMode.InferSchema || mode == XmlReadMode.InferTypedSchema) {
                            InferSchema(xdoc, null, mode);
                            ret = XmlReadMode.InferSchema;
                            xmlload.FromInference = true;
                            //                }
                            try {
                                xmlload.LoadData(xdoc);
                            }
                            finally {
                                xmlload.FromInference = false;
                            }
                        }
                    }

                    return ret;
                }
                finally {
                    // Dev11 904428: prepare and cleanup rowDiffId hashtable
                    rowDiffIdUsage.Cleanup();
                }
            }
            finally {
                Bid.ScopeLeave(ref hscp);
            }
        }
Пример #41
0
		public XmlDataReader (DataSet ds, XmlReader xr, XmlReadMode m)
		{
			dataset = ds;
			reader =xr;
			mode = m;
		}
Пример #42
0
        internal void InferSchema(XmlDocument xdoc, string[] excludedNamespaces, XmlReadMode mode) {
            IntPtr hscp;
            Bid.ScopeEnter(out hscp, "<ds.DataSet.InferSchema|INFO> %d#, mode=%d{ds.XmlReadMode}\n", ObjectID, (int)mode);
            try {
                string ns = xdoc.DocumentElement.NamespaceURI;
                if (null == excludedNamespaces) {
                    excludedNamespaces = new string[0];
                }
                XmlNodeReader xnr = new XmlIgnoreNamespaceReader(xdoc, excludedNamespaces);
                System.Xml.Schema.XmlSchemaInference infer = new System.Xml.Schema.XmlSchemaInference();

                infer.Occurrence = XmlSchemaInference.InferenceOption.Relaxed;

                if (mode == XmlReadMode.InferTypedSchema)
                    infer.TypeInference = XmlSchemaInference.InferenceOption.Restricted;
                else
                    infer.TypeInference = XmlSchemaInference.InferenceOption.Relaxed;

                XmlSchemaSet schemaSet = infer.InferSchema(xnr);
                schemaSet.Compile();

                XSDSchema schema = new XSDSchema();
                schema.FromInference = true;

                try {
                    schema.LoadSchema(schemaSet, this);
                }
                finally {
                    schema.FromInference = false; // this is always false if you are not calling fron inference
                }
            }
            finally {
                Bid.ScopeLeave(ref hscp);
            }
        }
Пример #43
0
		public static void Infer (DataSet dataset, XmlDocument document, XmlReadMode mode, string [] ignoredNamespaces)
		{
			new XmlDataInferenceLoader (dataset, document, mode, ignoredNamespaces).ReadXml ();
		}
Пример #44
0
		// LAMESPEC: XmlReadMode.Fragment is far from presisely
		// documented. MS.NET infers schema against this mode.
		public XmlReadMode ReadXml (XmlReader input, XmlReadMode mode)
		{
			switch (input.ReadState) {
			case ReadState.EndOfFile:
			case ReadState.Error:
			case ReadState.Closed:
				return mode;
			}
			// Skip XML declaration and prolog
			input.MoveToContent ();
			if (input.EOF)
				return mode;

			// FIXME: We need more decent code here, but for now
			// I don't know the precise MS.NET behavior, I just
			// delegate to specific read process.
			switch (mode) {
			case XmlReadMode.IgnoreSchema:
				return ReadXmlIgnoreSchema (input, mode, true);
			case XmlReadMode.ReadSchema:
				return ReadXmlReadSchema (input, mode, true);
			}
			// remaining modes are: Auto, InferSchema, Fragment, Diffgram

			XmlReader reader = input;

			int depth = reader.Depth;
			XmlReadMode result = mode;
			bool skippedTopLevelElement = false;
			string potentialDataSetName = null;
			XmlDocument doc = null;
			bool shouldReadData = mode != XmlReadMode.DiffGram;
			bool shouldNotInfer = Tables.Count > 0;

			switch (mode) {
			case XmlReadMode.Auto:
			case XmlReadMode.InferSchema:
				doc = new XmlDocument ();
				do {
					doc.AppendChild (doc.ReadNode (reader));
				} while (!reader.EOF &&
					doc.DocumentElement == null);
				reader = new XmlNodeReader (doc);
				reader.MoveToContent ();
				break;
			case XmlReadMode.DiffGram:
				if (!(reader.LocalName == "diffgram" &&
					reader.NamespaceURI == XmlConstants.DiffgrNamespace))
					goto case XmlReadMode.Auto;
				break;
			}

			switch (mode) {
			case XmlReadMode.Auto:
			case XmlReadMode.InferSchema:
			case XmlReadMode.ReadSchema:
				if (!(reader.LocalName == "diffgram" &&
					reader.NamespaceURI == XmlConstants.DiffgrNamespace) &&
					!(reader.LocalName == "schema" &&
					reader.NamespaceURI == XmlSchema.Namespace))
					potentialDataSetName = reader.LocalName;
				goto default;
			case XmlReadMode.Fragment:
				break;
			default:
				if (!(reader.LocalName == "diffgram" &&
					reader.NamespaceURI == XmlConstants.DiffgrNamespace) &&
					!(reader.LocalName == "schema" &&
					reader.NamespaceURI == XmlSchema.Namespace)) {
					if (!reader.IsEmptyElement) {
						reader.Read ();
						reader.MoveToContent ();
						skippedTopLevelElement = true;
					}
					else {
						switch (mode) {
						case XmlReadMode.Auto:
						case XmlReadMode.InferSchema:
							DataSetName = reader.LocalName;
							break;
						}
						reader.Read ();
					}
				}
				break;
			}

			// If schema, then read the first element as schema 
			if (reader.LocalName == "schema" && reader.NamespaceURI == XmlSchema.Namespace) {
				shouldNotInfer = true;
				switch (mode) {
				case XmlReadMode.IgnoreSchema:
				case XmlReadMode.InferSchema:
					reader.Skip ();
					break;
				case XmlReadMode.Fragment:
					ReadXmlSchema (reader);
					break;
				case XmlReadMode.DiffGram:
				case XmlReadMode.Auto:
					if (Tables.Count == 0) {
						ReadXmlSchema (reader);
						if (mode == XmlReadMode.Auto)
							result = XmlReadMode.ReadSchema;
					} else {
					// otherwise just ignore and return IgnoreSchema
						reader.Skip ();
						result = XmlReadMode.IgnoreSchema;
					}
					break;
				case XmlReadMode.ReadSchema:
					ReadXmlSchema (reader);
					break;
				}
			}

			// If diffgram, then read the first element as diffgram 
			if (reader.LocalName == "diffgram" && reader.NamespaceURI == XmlConstants.DiffgrNamespace) {
				switch (mode) {
				case XmlReadMode.Auto:
				case XmlReadMode.IgnoreSchema:
				case XmlReadMode.DiffGram:
					XmlDiffLoader DiffLoader = new XmlDiffLoader (this);
					DiffLoader.Load (reader);
					if (mode == XmlReadMode.Auto)
						result = XmlReadMode.DiffGram;
					shouldReadData = false;
					break;
				case XmlReadMode.Fragment:
					reader.Skip ();
					break;
				default:
					reader.Skip ();
					break;
				}
			}

			// if schema after diffgram, just skip it.
			if (!shouldReadData && reader.LocalName == "schema" && reader.NamespaceURI == XmlSchema.Namespace) {
				shouldNotInfer = true;
				switch (mode) {
				default:
					reader.Skip ();
					break;
				case XmlReadMode.ReadSchema:
				case XmlReadMode.DiffGram:
					if (Tables.Count == 0)
						ReadXmlSchema (reader);
					break;
				}
			}

			if (reader.EOF)
				return result == XmlReadMode.Auto ?
					potentialDataSetName != null && !shouldNotInfer ?
					XmlReadMode.InferSchema :
					XmlReadMode.IgnoreSchema : result;

			// Otherwise, read as dataset... but only when required.
			if (shouldReadData && !shouldNotInfer) {
				switch (mode) {
				case XmlReadMode.Auto:
					if (Tables.Count > 0)
						goto case XmlReadMode.IgnoreSchema;
					else
						goto case XmlReadMode.InferSchema;
				case XmlReadMode.InferSchema:
					InferXmlSchema (doc, null);
					if (mode == XmlReadMode.Auto)
						result = XmlReadMode.InferSchema;
					break;
				case XmlReadMode.IgnoreSchema:
				case XmlReadMode.Fragment:
				case XmlReadMode.DiffGram:
					break;
				default:
					shouldReadData = false;
					break;
				}
			}

			if (shouldReadData) {
				XmlReader dataReader = reader;
				if (doc != null) {
					dataReader = new XmlNodeReader (doc);
					dataReader.MoveToContent ();
				}
				if (reader.NodeType == XmlNodeType.Element)
					XmlDataReader.ReadXml (this, dataReader,
						mode);
			}

			if (skippedTopLevelElement) {
				switch (result) {
				case XmlReadMode.Auto:
				case XmlReadMode.InferSchema:
//					DataSetName = potentialDataSetName;
//					result = XmlReadMode.InferSchema;
					break;
				}
				if (reader.NodeType == XmlNodeType.EndElement)
					reader.ReadEndElement ();
			}
//*
			while (input.Depth > depth)
				input.Read ();
			if (input.NodeType == XmlNodeType.EndElement)
				input.Read ();
//*/
			input.MoveToContent ();

			return result == XmlReadMode.Auto ?
				XmlReadMode.IgnoreSchema : result;
		}
Пример #45
0
		public XmlReadMode ReadXml (Stream stream, XmlReadMode mode)
		{
			return ReadXml (new XmlTextReader (stream), mode);
		}
		// a bit detailed version
		public void AssertReadXml (DataSet ds, string label, string xml, XmlReadMode readMode, XmlReadMode resultMode, string datasetName, int tableCount, ReadState state, string readerLocalName, string readerNS)
		{
			XmlReader xtr = new XmlTextReader (xml, XmlNodeType.Element, null);
			AssertEquals (label + ".return", resultMode, ds.ReadXml (xtr, readMode));
			AssertDataSet (label + ".dataset", ds, datasetName, tableCount, -1);
			AssertEquals (label + ".readstate", state, xtr.ReadState);
			if (readerLocalName != null)
				AssertEquals (label + ".reader-localName",
					readerLocalName, xtr.LocalName);
			if (readerNS != null)
				AssertEquals (label + ".reader-ns", readerNS, xtr.NamespaceURI);
		}
Пример #47
0
		public XmlReadMode ReadXml (string fileName, XmlReadMode mode)
		{
			XmlTextReader reader = new XmlTextReader (fileName);
			try {
				return ReadXml (reader, mode);
			} finally {
				reader.Close ();
			}
		}
Пример #48
0
		// Read information from the reader.
		private void ReadModeSchema (XmlReader reader, XmlReadMode mode)
		{
			bool inferSchema = mode == XmlReadMode.InferSchema || mode == XmlReadMode.Auto;
			bool fillRows = mode != XmlReadMode.InferSchema;
			// This check is required for full DiffGram.
			// It is not described in MSDN and it is impossible
			// with WriteXml(), but when writing XML using
			// XmlSerializer, the output is like this:
			// <dataset>
			//  <schema>...</schema>
			//  <diffgram>...</diffgram>
			// </dataset>
			//
			// FIXME: This, this check should (also) be done
			// after reading the top-level element.

			//check if the current element is schema.
			if (reader.LocalName == "schema") {
				if (mode != XmlReadMode.Auto)
					reader.Skip(); // skip the schema node.
				else
					DSet.ReadXmlSchema(reader);
				
				reader.MoveToContent();
			}

			// load an XmlDocument from the reader.
			XmlDocument doc = new XmlDocument ();
			doc.Load (reader);
			if (doc.DocumentElement == null)
				return;

			// treatment for .net compliancy :
			// if xml representing dataset has exactly depth of 2 elements,
			// than the root element actually represents datatable and not dataset
			// so we add new root element to doc 
			// in order to create an element representing dataset.
			//
			// FIXME: Consider attributes. 
			// <root a='1' b='2' /> is regarded as a valid DataTable.
			int rootNodeDepth = XmlNodeElementsDepth(doc.DocumentElement);
			switch (rootNodeDepth) {
			case 1:
				if (inferSchema) {
					DSet.DataSetName = doc.DocumentElement.LocalName;
					DSet.Prefix = doc.DocumentElement.Prefix;
					DSet.Namespace = doc.DocumentElement.NamespaceURI;
				}
				return;
			case 2:
				// create new document
				XmlDocument newDoc = new XmlDocument();
				// create element for dataset
				XmlElement datasetElement = newDoc.CreateElement("dummy");
				// make the new created element to be the new doc root
				newDoc.AppendChild(datasetElement);
				// import all the elements from doc and insert them into new doc
				XmlNode root = newDoc.ImportNode(doc.DocumentElement,true);
				datasetElement.AppendChild(root);
				doc = newDoc;
				break;
			default:
				if (inferSchema) {
					DSet.DataSetName = doc.DocumentElement.LocalName;
					DSet.Prefix = doc.DocumentElement.Prefix;
					DSet.Namespace = doc.DocumentElement.NamespaceURI;
				}
				break;
			}

			// set EnforceConstraint to false - we do not want any validation during 
			// load time.
			bool origEnforceConstraint = DSet.EnforceConstraints;
			DSet.EnforceConstraints = false;

			// The childs are tables.
			XmlNodeList nList = doc.DocumentElement.ChildNodes;

			// FIXME: When reading DataTable (not DataSet), 
			// the nodes are column items, not rows.
			for (int i = 0; i < nList.Count; i++) {
				XmlNode node = nList[i];
				// node represents a table onky if it is of type XmlNodeType.Element
				if (node.NodeType == XmlNodeType.Element) {
					AddRowToTable(node, null, inferSchema, fillRows);
				}
			}
			// set the EnforceConstraints to original value;
			DSet.EnforceConstraints = origEnforceConstraint;
		}
Пример #49
0
		// LAMESPEC: XmlReadMode.Fragment is far from presisely
		// documented. MS.NET infers schema against this mode.
		public XmlReadMode ReadXml (XmlReader reader, XmlReadMode mode)
		{
			if (reader == null)
				return mode;

			switch (reader.ReadState) {
			case ReadState.EndOfFile:
			case ReadState.Error:
			case ReadState.Closed:
				return mode;
			}
			// Skip XML declaration and prolog
			reader.MoveToContent ();
			if (reader.EOF)
				return mode;

			if (reader is XmlTextReader) {
				// we dont need whitespace
				((XmlTextReader) reader).WhitespaceHandling = WhitespaceHandling.None;
			}

			XmlDiffLoader DiffLoader = null;

			// If diffgram, then read the first element as diffgram
			if (reader.LocalName == "diffgram" && reader.NamespaceURI == XmlConstants.DiffgrNamespace) {
				switch (mode) {
					case XmlReadMode.Auto:
					case XmlReadMode.DiffGram:
						if (DiffLoader == null)
							DiffLoader = new XmlDiffLoader (this);
						DiffLoader.Load (reader);
						// (and leave rest of the reader as is)
						return XmlReadMode.DiffGram;
					case XmlReadMode.Fragment:
						reader.Skip ();
						// (and continue to read)
						break;
					default:
						reader.Skip ();
						// (and leave rest of the reader as is)
						return mode;
				}
			}

			// If schema, then read the first element as schema
			if (reader.LocalName == "schema" && reader.NamespaceURI == XmlSchema.Namespace) {
				switch (mode) {
					case XmlReadMode.IgnoreSchema:
					case XmlReadMode.InferSchema:
						reader.Skip ();
						// (and break up read)
						return mode;
					case XmlReadMode.Fragment:
						ReadXmlSchema (reader);
						// (and continue to read)
						break;
					case XmlReadMode.Auto:
						if (Tables.Count == 0) {
							ReadXmlSchema (reader);
							return XmlReadMode.ReadSchema;
						} else {
							// otherwise just ignore and return IgnoreSchema
							reader.Skip ();
							return XmlReadMode.IgnoreSchema;
						}
					default:
						ReadXmlSchema (reader);
						// (and leave rest of the reader as is)
						return mode; // When DiffGram, return DiffGram
				}
			}

			if (reader.EOF)
				return mode;

			int depth = (reader.NodeType == XmlNodeType.Element) ? reader.Depth : -1;

			XmlDocument doc = new XmlDocument ();
			XmlElement root = doc.CreateElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
			if (reader.HasAttributes) {
				for (int i = 0; i < reader.AttributeCount; i++) {
					reader.MoveToAttribute(i);
					if (reader.NamespaceURI == XmlConstants.XmlnsNS)
						root.SetAttribute(reader.Name, reader.GetAttribute(i));
					else {
						XmlAttribute attr = root.SetAttributeNode(reader.LocalName, reader.NamespaceURI);
						attr.Prefix = reader.Prefix;
						attr.Value = reader.GetAttribute(i);
					}
				}
			}

			reader.Read();
			XmlReadMode retMode = mode;
			bool schemaLoaded = false;

			for (;;) {
				if( reader.Depth == depth ||
					reader.NodeType == XmlNodeType.EndElement)
					break;

				if (reader.NodeType != XmlNodeType.Element) {
					if (!reader.Read())
						break;
					continue;
				}

				if (reader.LocalName == "schema" && reader.NamespaceURI == XmlSchema.Namespace) {
					switch (mode) {
						case XmlReadMode.IgnoreSchema:
						case XmlReadMode.InferSchema:
							reader.Skip ();
							break;

						default:
							ReadXmlSchema (reader);
							retMode = XmlReadMode.ReadSchema;
							schemaLoaded = true;
							// (and leave rest of the reader as is)
							break;
					}

					continue;
				}

				if ((reader.LocalName == "diffgram") && (reader.NamespaceURI == XmlConstants.DiffgrNamespace)) {
					if ((mode == XmlReadMode.DiffGram) || (mode == XmlReadMode.IgnoreSchema)
						|| mode == XmlReadMode.Auto) {
						if (DiffLoader == null)
							DiffLoader = new XmlDiffLoader (this);
						DiffLoader.Load (reader);
						// (and leave rest of the reader as is)
						retMode = XmlReadMode.DiffGram;
					}
					else
						reader.Skip();

					continue;
				}

				//collect data
				XmlNode n = doc.ReadNode(reader);
				root.AppendChild(n);
			}

			if (reader.NodeType == XmlNodeType.EndElement)
				reader.Read ();
			reader.MoveToContent();

			if (mode == XmlReadMode.DiffGram) {
				return retMode;
			}

			doc.AppendChild(root);

			if (!schemaLoaded &&
				retMode != XmlReadMode.ReadSchema &&
				mode != XmlReadMode.IgnoreSchema &&
				mode != XmlReadMode.Fragment &&
				(Tables.Count == 0 || mode == XmlReadMode.InferSchema)) {
				InferXmlSchema(doc, null);
				if (mode == XmlReadMode.Auto)
					retMode = XmlReadMode.InferSchema;
			}

			reader = new XmlNodeReader (doc);
			XmlDataReader.ReadXml (this, reader, mode);

			return retMode == XmlReadMode.Auto ?
				XmlReadMode.IgnoreSchema : retMode;
		}
Пример #50
0
 public static void AssertReadXml(DataSet ds, string label, string xml, XmlReadMode readMode, XmlReadMode resultMode, string datasetName, int tableCount, ReadState state)
 {
     DataSetAssertion.AssertReadXml(ds, label, xml, readMode, resultMode, datasetName, tableCount, state, null, null);
 }
 public XmlReadMode ReadXml(Stream stream, XmlReadMode mode)
 {
     if (stream == null)
     {
         return XmlReadMode.Auto;
     }
     XmlTextReader reader = (mode == XmlReadMode.Fragment) ? new XmlTextReader(stream, XmlNodeType.Element, null) : new XmlTextReader(stream);
     return this.ReadXml(reader, mode, false);
 }
Пример #52
0
 public XmlReadMode ReadXml(string fileName, XmlReadMode mode);
 public XmlReadMode ReadXml(TextReader reader, XmlReadMode mode)
 {
     if (reader == null)
     {
         return XmlReadMode.Auto;
     }
     XmlTextReader reader2 = (mode == XmlReadMode.Fragment) ? new XmlTextReader(reader.ReadToEnd(), XmlNodeType.Element, null) : new XmlTextReader(reader);
     return this.ReadXml(reader2, mode, false);
 }
 public XmlReadMode ReadXml(string fileName, XmlReadMode mode)
 {
     XmlTextReader reader = null;
     XmlReadMode mode2;
     if (mode == XmlReadMode.Fragment)
     {
         FileStream xmlFragment = new FileStream(fileName, FileMode.Open);
         reader = new XmlTextReader(xmlFragment, XmlNodeType.Element, null);
     }
     else
     {
         reader = new XmlTextReader(fileName);
     }
     try
     {
         mode2 = this.ReadXml(reader, mode, false);
     }
     finally
     {
         reader.Close();
     }
     return mode2;
 }
Пример #55
0
 public XmlReadMode ReadXml(string fileName, XmlReadMode mode)
 {
     XmlTextReader xr = null;
     if (mode == XmlReadMode.Fragment) {
         FileStream stream = new FileStream(fileName, FileMode.Open);
         xr = new XmlTextReader(stream, XmlNodeType.Element, null);
     }
     else
         xr = new XmlTextReader(fileName);
     try {
         return ReadXml(xr, mode, false);
     }
     finally {
         xr.Close();
     }
 }
Пример #56
0
 /// <summary>
 /// Reload the contents obtained from a previous call to <see cref="ToXml"/>. Use the mode
 /// parameter for finer control.
 /// </summary>
 /// <param name="xml">The string to reload</param>
 /// <param name="mode">See the .NET XmlReadMode enum for more help.</param>
 ///	<example>
 ///	VB.NET
 ///	<code>
 ///	Dim emps As New Employees
 /// emps.Query.Load()              ' emps.RowCount = 200
 /// emps.FirstName = "Griffinski"  ' Change first row
 /// emps.GetChanges()              ' emps.RowCount now = 1 
 /// 
 /// ' Now reload that single record into a new Employees object and Save it
 /// Dim xml As String = emps.ToXml()
 /// Dim empsClone As New Employees
 /// empsClone.FromXml(xml)
 /// empsClone.Save()
 ///	</code>
 ///	C#
 /// <code>
 /// Employees emps = new Employees();
 /// emps.LoadAll();                // emps.RowCount = 200
 /// emps.LastName = "Griffinski";  // Change first row
 /// emps.GetChanges();             // emps.RowCount now = 1 
 /// 
 /// // Now reload that single record into a new Employees object and Save it
 /// string str = emps.ToXml();
 /// Employees empsClone = new Employees();
 /// empsClone.FromXml(str);
 /// empsClone.Save();
 /// </code> 
 ///	</example>
 public virtual void FromXml(string xml, XmlReadMode mode)
 {
     DataSet dataSet = new DataSet();
     StringReader reader = new StringReader(xml);
     dataSet.ReadXml(reader, mode);
     this.DataTable =  dataSet.Tables[0];
     dataSet.Tables.Clear();
 }
Пример #57
0
        // Read information from the reader.
        private void ReadModeSchema(XmlReader reader, XmlReadMode mode)
        {
            bool inferSchema = mode == XmlReadMode.InferSchema || mode == XmlReadMode.Auto;
            bool fillRows    = mode != XmlReadMode.InferSchema;

            // This check is required for full DiffGram.
            // It is not described in MSDN and it is impossible
            // with WriteXml(), but when writing XML using
            // XmlSerializer, the output is like this:
            // <dataset>
            //  <schema>...</schema>
            //  <diffgram>...</diffgram>
            // </dataset>
            //
            // FIXME: This, this check should (also) be done
            // after reading the top-level element.

            //check if the current element is schema.
            if (reader.LocalName == "schema")
            {
                if (mode != XmlReadMode.Auto)
                {
                    reader.Skip(); // skip the schema node.
                }
                else
                {
                    DSet.ReadXmlSchema(reader);
                }

                reader.MoveToContent();
            }

            // load an XmlDocument from the reader.
            XmlDocument doc = new XmlDocument();

            doc.Load(reader);
            if (doc.DocumentElement == null)
            {
                return;
            }

            // treatment for .net compliancy :
            // if xml representing dataset has exactly depth of 2 elements,
            // than the root element actually represents datatable and not dataset
            // so we add new root element to doc
            // in order to create an element representing dataset.
            //
            // FIXME: Consider attributes.
            // <root a='1' b='2' /> is regarded as a valid DataTable.
            int rootNodeDepth = XmlNodeElementsDepth(doc.DocumentElement);

            switch (rootNodeDepth)
            {
            case 1:
                if (inferSchema)
                {
                    DSet.DataSetName = doc.DocumentElement.LocalName;
                    DSet.Prefix      = doc.DocumentElement.Prefix;
                    DSet.Namespace   = doc.DocumentElement.NamespaceURI;
                }
                return;

            case 2:
                // create new document
                XmlDocument newDoc = new XmlDocument();
                // create element for dataset
                XmlElement datasetElement = newDoc.CreateElement("dummy");
                // make the new created element to be the new doc root
                newDoc.AppendChild(datasetElement);
                // import all the elements from doc and insert them into new doc
                XmlNode root = newDoc.ImportNode(doc.DocumentElement, true);
                datasetElement.AppendChild(root);
                doc = newDoc;
                break;

            default:
                if (inferSchema)
                {
                    DSet.DataSetName = doc.DocumentElement.LocalName;
                    DSet.Prefix      = doc.DocumentElement.Prefix;
                    DSet.Namespace   = doc.DocumentElement.NamespaceURI;
                }
                break;
            }

            // set EnforceConstraint to false - we do not want any validation during
            // load time.
            bool origEnforceConstraint = DSet.EnforceConstraints;

            DSet.EnforceConstraints = false;

            // The childs are tables.
            XmlNodeList nList = doc.DocumentElement.ChildNodes;

            // FIXME: When reading DataTable (not DataSet),
            // the nodes are column items, not rows.
            for (int i = 0; i < nList.Count; i++)
            {
                XmlNode node = nList[i];
                // node represents a table onky if it is of type XmlNodeType.Element
                if (node.NodeType == XmlNodeType.Element)
                {
                    AddRowToTable(node, null, inferSchema, fillRows);
                }
            }
            // set the EnforceConstraints to original value;
            DSet.EnforceConstraints = origEnforceConstraint;
        }
Пример #58
0
        /// <devdoc>
        /// </devdoc>
        public XmlReadMode ReadXml(TextReader reader, XmlReadMode mode)
        {
            if (reader == null)
                return XmlReadMode.Auto;

            XmlTextReader xmlreader = (mode == XmlReadMode.Fragment) ? new XmlTextReader(reader.ReadToEnd(), XmlNodeType.Element, null) : new XmlTextReader(reader);
            // Prevent Dtd entity in dataset 
            xmlreader.XmlResolver = null;
            return ReadXml(xmlreader, mode, false);
        }
Пример #59
0
        internal XmlReadMode ReadXml(XmlReader reader, XmlReadMode mode, bool denyResolving)
        {
            DataTable.RowDiffIdUsageSection rowDiffIdUsage = new DataTable.RowDiffIdUsageSection();
            try {
                bool fSchemaFound = false;
                bool fDataFound = false;
                bool fIsXdr = false;
                int iCurrentDepth = -1;
                XmlReadMode ret = mode;

                // Dev11 904428: prepare and cleanup rowDiffId hashtable
                rowDiffIdUsage.Prepare(this);

                if (reader == null)
                    return ret;

                bool originalEnforceConstraint  = false;
                if (this.DataSet != null) {
                    originalEnforceConstraint  = this.DataSet.EnforceConstraints;
                    this.DataSet.EnforceConstraints = false;
                }
                else {
                    originalEnforceConstraint  = this.EnforceConstraints;
                    this.EnforceConstraints = false;
                }

                if (reader is XmlTextReader)
                    ((XmlTextReader) reader).WhitespaceHandling = WhitespaceHandling.Significant;

                XmlDocument xdoc = new XmlDocument(); // we may need this to infer the schema

                if ((mode != XmlReadMode.Fragment) && (reader.NodeType == XmlNodeType.Element))
                    iCurrentDepth = reader.Depth;

                reader.MoveToContent();
                if (Columns.Count == 0) {
                    if (IsEmptyXml(reader)) {
                        reader.Read();
                        return ret;
                    }
                }

                XmlDataLoader xmlload = null;

                if (reader.NodeType == XmlNodeType.Element) {
                    XmlElement topNode = null;
                    if (mode == XmlReadMode.Fragment) {
                        xdoc.AppendChild(xdoc.CreateElement("ds_sqlXmlWraPPeR"));
                        topNode = xdoc.DocumentElement;
                    }
                    else { //handle the top node
                        if ((reader.LocalName == Keywords.DIFFGRAM) && (reader.NamespaceURI == Keywords.DFFNS)) {
                            if ((mode == XmlReadMode.DiffGram) || (mode == XmlReadMode.IgnoreSchema)) {
                                if (Columns.Count == 0) {
                                    if(reader.IsEmptyElement) {
                                        reader.Read();
                                        return XmlReadMode.DiffGram;
                                    }
                                    throw ExceptionBuilder.DataTableInferenceNotSupported();
                                }
                                this.ReadXmlDiffgram(reader);
                                // read the closing tag of the current element
                                ReadEndElement(reader);
                            }
                            else {
                                reader.Skip();
                            }
                            RestoreConstraint(originalEnforceConstraint);
                            return ret;
                        }

                        if (reader.LocalName == Keywords.XDR_SCHEMA && reader.NamespaceURI==Keywords.XDRNS) {
                            // load XDR schema and exit
                            if ((mode != XmlReadMode.IgnoreSchema) && (mode != XmlReadMode.InferSchema)) {
                                ReadXDRSchema(reader);
                            }
                            else {
                                reader.Skip();
                            }
                            RestoreConstraint(originalEnforceConstraint);
                            return ret; //since the top level element is a schema return
                        }

                        if (reader.LocalName == Keywords.XSD_SCHEMA && reader.NamespaceURI==Keywords.XSDNS) {
                            // load XSD schema and exit
                            if ((mode != XmlReadMode.IgnoreSchema) && (mode != XmlReadMode.InferSchema))  {
                                ReadXmlSchema(reader, denyResolving);
                            }
                            else
                                reader.Skip();
                            RestoreConstraint(originalEnforceConstraint);
                            return ret; //since the top level element is a schema return
                        }

                        if (reader.LocalName == Keywords.XSD_SCHEMA && reader.NamespaceURI.StartsWith(Keywords.XSD_NS_START, StringComparison.Ordinal))  {
                             if (this.DataSet != null) { // we should not throw for constraint, we already will throw for unsupported schema, so restore enforce cost, but not via property
                                 this.DataSet.RestoreEnforceConstraints(originalEnforceConstraint);
                             }
                             else {
                                this.enforceConstraints = originalEnforceConstraint;
                            }
                            throw ExceptionBuilder.DataSetUnsupportedSchema(Keywords.XSDNS);
                        }

                        // now either the top level node is a table and we load it through dataReader...
                        // ... or backup the top node and all its attributes
                        topNode = xdoc.CreateElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
                        if (reader.HasAttributes) {
                            int attrCount = reader.AttributeCount;
                            for (int i=0;i<attrCount;i++) {
                                reader.MoveToAttribute(i);
                                if (reader.NamespaceURI.Equals(Keywords.XSD_XMLNS_NS))
                                    topNode.SetAttribute(reader.Name, reader.GetAttribute(i));
                                else {
                                    XmlAttribute attr = topNode.SetAttributeNode(reader.LocalName, reader.NamespaceURI);
                                    attr.Prefix = reader.Prefix;
                                    attr.Value = reader.GetAttribute(i);
                                }
                            }
                        }
                        reader.Read();
                    }

                    while(MoveToElement(reader, iCurrentDepth)) {

                        if (reader.LocalName == Keywords.XDR_SCHEMA && reader.NamespaceURI==Keywords.XDRNS) {
                            // load XDR schema
                       	    if (!fSchemaFound && !fDataFound && (mode != XmlReadMode.IgnoreSchema) && (mode != XmlReadMode.InferSchema))  {
                                ReadXDRSchema(reader);
                                fSchemaFound = true;
                                fIsXdr = true;
                            }
                            else {
                                reader.Skip();
                            }
                            continue;
                        }

                        if (reader.LocalName == Keywords.XSD_SCHEMA && reader.NamespaceURI==Keywords.XSDNS) {
                        // load XSD schema and exit
                            if ((mode != XmlReadMode.IgnoreSchema) && (mode != XmlReadMode.InferSchema))  {
                                ReadXmlSchema(reader, denyResolving);
                                fSchemaFound = true;
                            }
                            else {
                                reader.Skip();
                            }
                            continue;
                        }

                        if ((reader.LocalName == Keywords.DIFFGRAM) && (reader.NamespaceURI == Keywords.DFFNS)) {
                            if ((mode == XmlReadMode.DiffGram) || (mode == XmlReadMode.IgnoreSchema)) {
                                if (Columns.Count == 0) {
                                    if(reader.IsEmptyElement) {
                                        reader.Read();
                                        return XmlReadMode.DiffGram;
                                    }
                                    throw ExceptionBuilder.DataTableInferenceNotSupported();
                                }
                                this.ReadXmlDiffgram(reader);
                                ret = XmlReadMode.DiffGram;
                            }
                            else {
                                reader.Skip();
                            }
                            continue;
                        }

                        if (reader.LocalName == Keywords.XSD_SCHEMA && reader.NamespaceURI.StartsWith(Keywords.XSD_NS_START, StringComparison.Ordinal))  {
                            if (this.DataSet != null) { // we should not throw for constraint, we already will throw for unsupported schema, so restore enforce cost, but not via property
                                 this.DataSet.RestoreEnforceConstraints(originalEnforceConstraint);
                            }
                            else {
                                this.enforceConstraints = originalEnforceConstraint;
                            }
                            throw ExceptionBuilder.DataSetUnsupportedSchema(Keywords.XSDNS);
                        }

                        if (mode == XmlReadMode.DiffGram) {
                            reader.Skip();
                            continue; // we do not read data in diffgram mode
                        }

                        // if we are here we found some data
                        fDataFound = true;

                        if (mode == XmlReadMode.InferSchema) { //save the node in DOM until the end;
                            XmlNode node = xdoc.ReadNode(reader);
                            topNode.AppendChild(node);
                        }
                        else {
                            if (Columns.Count == 0) {
                                throw ExceptionBuilder.DataTableInferenceNotSupported();
                            }
                            if (xmlload == null)
                                xmlload = new XmlDataLoader(this, fIsXdr, topNode,  mode == XmlReadMode.IgnoreSchema);
                            xmlload.LoadData(reader);
                        }
                    } //end of the while

                    // read the closing tag of the current element
                    ReadEndElement(reader);

                    // now top node contains the data part
                    xdoc.AppendChild(topNode);

                    if (xmlload == null)
                        xmlload = new XmlDataLoader(this, fIsXdr, mode == XmlReadMode.IgnoreSchema);

                    if (mode == XmlReadMode.DiffGram) {
                        // we already got the diffs through XmlReader interface
                        RestoreConstraint(originalEnforceConstraint);
                        return ret;
                    }
    //todo
                    // Load Data
                    if (mode == XmlReadMode.InferSchema) {
                        if (Columns.Count == 0) {
                            throw ExceptionBuilder.DataTableInferenceNotSupported();
                        }

    // [....]                    xmlload.InferSchema(xdoc, null);
    // [....]                    xmlload.LoadData(xdoc);
                    }
                }
                RestoreConstraint(originalEnforceConstraint);

                return ret;
            }
            finally {
                // Dev11 904428: prepare and cleanup rowDiffId hashtable
                rowDiffIdUsage.Cleanup();
            }
        }
Пример #60
0
		private XmlReadMode ReadXmlIgnoreSchema (XmlReader input, XmlReadMode mode, bool checkRecurse)
		{
			if (input.LocalName == "schema" &&
				input.NamespaceURI == XmlSchema.Namespace) {
				input.Skip ();
			}
			else if (input.LocalName == "diffgram" &&
				input.NamespaceURI == XmlConstants.DiffgrNamespace) {
				XmlDiffLoader DiffLoader = new XmlDiffLoader (this);
				DiffLoader.Load (input);
			}
			else if (checkRecurse ||
				input.LocalName == DataSetName &&
				input.NamespaceURI == Namespace) {
				XmlDataReader.ReadXml (this, input, mode);
			}
			else if (checkRecurse && !input.IsEmptyElement) {
				int depth = input.Depth;
				input.Read ();
				input.MoveToContent ();
				ReadXmlIgnoreSchema (input, mode, false);
				while (input.Depth > depth)
					input.Skip ();
				if (input.NodeType == XmlNodeType.EndElement)
					input.ReadEndElement ();
			}
			input.MoveToContent ();
			return XmlReadMode.IgnoreSchema;
		}