您的位置:首页 > 其它

将数据导出到xml,并从xml导入数据

2008-12-10 09:50 274 查看
xml本质上是数据,是另一种格式的数据。而ADO.NET就是用来处理数据的。因此通过DataSet可以非常方便的处理xml。下面这段程序对如下问题做出了解答: 怎样从DataSet得到xml?生成的XML没有表之间的关系怎么办?怎样把列数据作为子元素?(在利用数据集得到XML时)怎样把列数据作为属性?(在利用数据集得到XML时)怎样利用数据集形成XML文件?怎样设置xml的namespace和prefix?怎样控制控制文本的格式?[align=left]怎样把XML文件里的数据读入数据集?[/align]怎样利用XML文件传递数据集架构?怎样利用XML文件在不同数据集之间传递更改? [align=left]using System;[/align][align=left]using System.Data;[/align][align=left]using System.Data.OleDb;[/align][align=left]using General.ADONET;[/align][align=left]using General.ADONET.OLEDBClient;[/align][align=left]using System.IO;[/align][align=left]using System.Xml;[/align][align=left] [/align][align=left]namespace PlayXML[/align][align=left]{[/align][align=left]     ///<summary>[/align][align=left]     /// PlayXML 的摘要说明。[/align][align=left]     ///</summary>[/align][align=left]     public class XMLPlayer[/align][align=left]     {[/align][align=left]         public XMLPlayer()[/align][align=left]         {[/align][align=left]              //[/align][align=left]              // TODO: 在此处添加构造函数逻辑[/align][align=left]              //[/align][align=left]         }[/align][align=left] [/align][align=left]         private Adapter adptEmp;[/align][align=left]         private Adapter adptDept;[/align][align=left]         private OleDbConnection conn;[/align][align=left]         private DataSet dsHR;[/align][align=left] [/align][align=left]          //初始化数据集[/align][align=left]         public void InitDataSet()[/align][align=left]         {[/align][align=left]            string strConn = "Provider = Microsoft.Jet.OLEDB.4.0;";[/align][align=left]              strConn += "Data Source = E://everyday//VS//HELPREN//hr.mdb;";[/align][align=left]              this.conn = new OleDbConnection(strConn);[/align][align=left] [/align][align=left]              dsHR = new DataSet();[/align][align=left] [/align][align=left]              this.adptEmp =[/align][align=left]                   new Adapter(this.conn, dsHR, "employees");[/align][align=left]              this.adptDept =[/align][align=left]                   new Adapter(this.conn, dsHR, "departments");[/align][align=left] [/align][align=left]              this.adptDept.Fill();[/align][align=left]              this.adptEmp.Fill();[/align][align=left] [/align][align=left]              DataTable dtDept = this.dsHR.Tables["departments"];[/align][align=left]              DataTable dtEmp = this.dsHR.Tables["employees"];[/align][align=left] [/align][align=left]              DataColumn colParent = dtDept.Columns["dept_id"];[/align][align=left]              DataColumn colChild = dtEmp.Columns["emp_department"];[/align][align=left] [/align][align=left]              dsHR.Relations.Add([/align][align=left]                   "departments_employees",[/align][align=left]                   colParent, colChild);//关系[/align][align=left]         }[/align][align=left] [/align][align=left]         //怎样从DataSet得到xml?[/align][align=left]         public void GetXml()[/align][align=left]         {[/align][align=left]              Console.WriteLine([/align][align=left]                   this.dsHR.GetXml()//这个方法就是从DataSet得到xml[/align][align=left]                   );[/align][align=left]         }[/align][align=left] [/align][align=left]         //生成的XML没有表之间的关系怎么办?[/align][align=left]         public void GetXmlWithRalation()[/align][align=left]         {[/align][align=left]              //指定DataRelation在DataSet中进行嵌套[/align][align=left]              //使xml序列化生成关系[/align][align=left]              this.dsHR.Relations["departments_employees"].Nested = true;[/align][align=left] [/align][align=left]              Console.WriteLine([/align][align=left]                   this.dsHR.GetXml()//这个方法就是从DataSet得到xml[/align][align=left]                   );[/align][align=left]         }[/align][align=left] [/align][align=left]         //怎样把列数据作为子元素?(在利用数据集得到XML时)[/align][align=left]         public void GetSubElements()[/align][align=left]         {[/align][align=left]              DataTable dtEmp = this.dsHR.Tables["employees"];[/align][align=left]              foreach(DataColumn col in dtEmp.Columns)[/align][align=left]              {[/align][align=left]                   //列的ColumnMapping属性设置为MappingType.Element就可以了[/align][align=left]                   col.ColumnMapping = MappingType.Element;[/align][align=left]              }[/align][align=left]                  [/align][align=left]              DataTable dtDept = this.dsHR.Tables["departments"];[/align][align=left]              foreach(DataColumn col in dtDept.Columns)[/align][align=left]              {[/align][align=left]                   //列的ColumnMapping属性设置为MappingType.Element就可以了[/align][align=left]                   col.ColumnMapping = MappingType.Element;[/align][align=left]              }[/align][align=left] [/align][align=left]              this.dsHR.GetXml();[/align][align=left]         }[/align][align=left] [/align][align=left]         //怎样把列数据作为属性?(在利用数据集得到XML时)[/align][align=left]         public void GetAttributes()[/align][align=left]         {[/align][align=left]              DataTable dtEmp = this.dsHR.Tables["employees"];[/align][align=left]              foreach(DataColumn col in dtEmp.Columns)[/align][align=left]              {[/align][align=left]                   //列的ColumnMapping属性设置为MappingType.Attribute就可以了[/align][align=left]                   col.ColumnMapping = MappingType.Attribute;[/align][align=left]              }[/align][align=left]                  [/align][align=left]              DataTable dtDept = this.dsHR.Tables["departments"];[/align][align=left]              foreach(DataColumn col in dtDept.Columns)[/align][align=left]              {[/align][align=left]                   //列的ColumnMapping属性设置为MappingType.Attribute就可以了[/align][align=left]                   col.ColumnMapping = MappingType.Attribute;[/align][align=left]              }[/align][align=left] [/align][align=left]              this.dsHR.GetXml();[/align][align=left]         }[/align][align=left] [/align][align=left]         //怎样利用数据集形成XML文件?[/align][align=left]         public void WriteXml()[/align][align=left]         {[/align][align=left]              //怎样设置xml的namespace和prefix?[/align][align=left]              this.dsHR.Namespace = "ADONET";[/align][align=left]              this.dsHR.Prefix = "an";[/align][align=left] [/align][align=left]              this.dsHR.WriteXml("test.xml", XmlWriteMode.WriteSchema);[/align][align=left] [/align][align=left]              //怎样控制控制文本的格式?[/align][align=left]              StreamWriter sw = new StreamWriter("test2.xml");[/align][align=left]              XmlTextWriter xmlWriter = new XmlTextWriter(sw);[/align][align=left]              xmlWriter.Formatting = Formatting.Indented;[/align][align=left]              xmlWriter.Indentation = 10;[/align][align=left]              this.dsHR.WriteXml(xmlWriter);[/align][align=left]              xmlWriter.Close();         [/align][align=left]         }[/align][align=left] [/align][align=left]         //怎样把XML文件里的数据读入数据集?[/align][align=left]         public void ReadXml()[/align][align=left]         {[/align][align=left]              DataSet dsNew = new DataSet();[/align][align=left]              dsNew.ReadXml("test.xml");[/align][align=left]              Console.WriteLine(dsNew.GetXml());[/align][align=left]         }[/align][align=left] [/align][align=left]         //怎样利用XML文件传递数据集架构?[/align][align=left]         public void TransmitSchema()[/align][align=left]         {[/align][align=left]              StreamWriter sw = new StreamWriter("test.xsd");[/align][align=left]              XmlTextWriter xmlWriter = new XmlTextWriter(sw);[/align][align=left]              this.dsHR.WriteXmlSchema(xmlWriter);[/align][align=left]              xmlWriter.Close();[/align][align=left] [/align][align=left]              DataSet dsNew = new DataSet();[/align][align=left]              dsNew.ReadXmlSchema("test.xsd");[/align][align=left] [/align][align=left]              foreach(DataTable dt in dsNew.Tables)[/align][align=left]              {[/align][align=left]                   Console.WriteLine(dt.TableName);[/align][align=left]                   foreach(DataColumn dc in dt.Columns)[/align][align=left]                   {[/align][align=left]                       Console.WriteLine("         " + dc.ColumnName);[/align][align=left]                   }[/align][align=left]              }[/align][align=left]         }[/align][align=left] [/align][align=left]         //怎样利用XML文件在不同数据集之间传递更改?[/align][align=left]         public void PlayDiffGram()[/align][align=left]         {[/align][align=left]              //为两个datatable设置主键[/align][align=left]              DataTable dtEmp = this.dsHR.Tables["employees"];[/align][align=left]              DataTable dtDept = this.dsHR.Tables["departments"];[/align][align=left]              dtEmp.PrimaryKey = new DataColumn[][/align][align=left]                   {dtEmp.Columns["emp_id"]};[/align][align=left]              dtDept.PrimaryKey = new DataColumn[][/align][align=left]                   {dtDept.Columns["dept_id"]};[/align][align=left] [/align][align=left]              //把数据集写到xml文件[/align][align=left]              StreamWriter sw = new StreamWriter("test.xml");[/align][align=left]              XmlTextWriter xmlWriter = new XmlTextWriter(sw);[/align][align=left]              this.dsHR.WriteXml(xmlWriter, XmlWriteMode.WriteSchema);[/align][align=left]              sw.Close();[/align][align=left] [/align][align=left]              //从xml文件读入数据到一个新的数据集里[/align][align=left]              DataSet dsNew = new DataSet();[/align][align=left]              dsNew.ReadXml("test.xml", XmlReadMode.ReadSchema);[/align][align=left]              dsNew.AcceptChanges();[/align][align=left] [/align][align=left]              //修改值[/align][align=left]              this.dsHR.Tables["employees"].Rows[0]["emp_name"] = "aaaaa";[/align][align=left]              dsNew.Tables["employees"].Rows[0]["emp_name"] = "ccccc";[/align][align=left] [/align][align=left]              //把新数据集里的数据输出到xml文件[/align][align=left]              Stream newStream = new MemoryStream() as Stream;[/align][align=left]              XmlTextWriter xmlNewWriter =[/align][align=left]                   new XmlTextWriter(newStream, null);[/align][align=left]              xmlNewWriter.Formatting = Formatting.Indented;[/align][align=left]              dsNew.GetChanges().WriteXml(xmlNewWriter, XmlWriteMode.DiffGram);[/align][align=left] [/align][align=left]              //显示现在xml文件的内容[/align][align=left]              newStream.Position = 0;[/align][align=left]              StreamReader rdr = new StreamReader(newStream);[/align][align=left]              Console.WriteLine(rdr.ReadToEnd());[/align][align=left] [/align][align=left]              newStream.Position = 0;[/align][align=left] [/align][align=left]              //把现在的xml文件的内容读到原先的那个数据集[/align][align=left]              this.dsHR.ReadXml(newStream, XmlReadMode.DiffGram);[/align][align=left]         }[/align][align=left]     }[/align][align=left]}[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: