1.使用XML控件读取XML文件:
(1)DocumentSource和TransformSource属性
Document:该属性表示使用XmlDocument对象来设置XML文档。
DocumentContent:使用字符串来设置XML文档,该属性通常是以声明方式设置,具体方法是在XML控件的<asp:Xml>标记的开始和结束之间放置DocumentSource:该属性使用文件来设置XML文档。
文本。
Transform:使用指定的XslTransform类对象格式化XML文档。
TransformSource:使用指定的XSL转换文件格式化XML文档。
(2)Document和Transform属性
 <%@ Import Namespace="System.Xml.Xsl" %>
<%@ Import Namespace="System.Xml" %>
<%@ Page Language="C#" AutoEventWireup="True" %>
<html>
 <script runat="server" language=C#>
  void Page_Load(Object sender, EventArgs e)
  {
   //创建XmlDocument对象 
   XmlDocument doc = new XmlDocument();
   //加载指定的XML数据
   doc.Load(Server.MapPath("AddressList.xml"));
   //创建XslTransform对象
   XslTransform trans = new XslTransform();
   //加载指定的XSL文件
   trans.Load(Server.MapPath("AddressList.xsl"));
   myxml.Document = doc;
   myxml.Transform = trans;
  }
 </script>
 <body>
  <h3>读取XML文档内容如下:</h3>
  <form runat="server" ID="Form1">
   <asp:Xml id="myxml" runat="server" />
  </form>
 </body></html>
2.使用XML DOM对象模型
   AppendChild():将指定的节点添加到该节点的子节点列表的末尾。
? Clone():创建此节点的一个副本。
? CreateAttribute():创建具有指定名称的XmlAttribute对象。
? CreateComment():创建包含指定数据的XmlComment对象。
? CreateDocumentType():返回新的XmlDocumentType对象。
? CreateElement():创建元素。
? CreateNode():创建指定类型的节点,如创建文档声明等。
? CreateTextNode():创建具有指定文本的XmlText。
? Equals():确定两个Object实例是否相等。
   GetElementsByTagName():返回一个XmlNodeList对象,它包含与指定名称匹配的所有子元素的列表。
? GetEnumerator():提供对XmlNode中节点上“for each”样式迭代的支持。
? GetType():获取当前实例的类型。
? InsertAfter():将指定的节点紧接着插入指定的引用节点之后。
? InsertBefore():将指定的节点紧接着插入指定的引用节点之前。
? Load():加载指定的XML数据。注意:Load()方法总是保留重要的空白,PreserveWhitespace属性确定是否保留空白。默认值为false,不保留空白。
? LoadXml():从指定的字符串加载XML文档。
? PrependChild():将指定的节点添加到该节点的子节点列表的开头。
? RemoveAll():移除当前节点的所有子节点或属性。
? RemoveChild():移除指定的子节点。
? ReplaceChild():用新节点替换某个子节点。
? Save():将XML文档保存到指定的位置。
? SelectNodes():选择匹配XPath表达式的节点列表。
? WriteContentTo():将XmlDocument节点的所有子级保存到指定的XmlWriter中。

3.使用XmlDocument类解析XML文档
使用该类对文档进行解析,一般步骤如下:
(1)通过XML文档创建DOM树。
(2)遍历元素(根元素的下级节点),获取该元素的属性、字符数据和所有子节点等。
(3)遍历子节点,获取元素的属性和字符数据,如果该节点还有子节点,获取所有子节点,然后重复第三步,直到遍历完该文档的所有节点为止。
 void Page_Load(Object sender, EventArgs e)
  {
   string str="";
   //创建XmlDocument对象 
   XmlDocument doc = new XmlDocument();
   //加载指定的XML数据
   doc.Load(Server.MapPath("AddressList.xml"));
//遍历friend元素
   XmlNodeList list=doc.GetElementsByTagName("friend");
   for(int i=0;i<list.Count;i++)
   {
    XmlNode node=list.Item(i);
    //获取friend元素的属性
    XmlNode attr=node.Attributes.Item(0);
    str+=attr.Name+"="+attr.FirstChild.InnerText+"</br>";
    //遍历friend元素的子元素
    XmlNodeList l=node.ChildNodes;
    for(int j=0;j<l.Count;j++)
    {
     XmlNode n=l.Item(j);
     //获取元素标记和字符数据
     str+=n.Name+":"+n.FirstChild.InnerText+"</br>";
    }
    str+="</p>";
   }
   Label1.Text=str;
  }
有上述例子可以看出:在遍历一个节点时先获取该节点的属性在获取该节点下的子节点。
4.使用XmlDocument类创建XML文档
使用XmlDocument类创建xml文档有两种方法;
(1)使用LoadXml(string xml)方法和Save(string fileName)方法,即将文档中的内容以字符串的形式作为LoadXml(string xml)方法的参数,从该字符串加载到XML文档,然后调用该类的Save(string fileName)方法将其保存到文件中
<script language="C#" runat="server">
  private void Page_Load(object sender, System.EventArgs e)
  {
   XmlDocument doc = new XmlDocument();
   string xml="<catalog>"
    +"<cd>"
     +"<name>Empire Burlesque</name>"
     +"<artist>Bob Dylan</artist>"
     +"<country>USA</country>"
     +"<company>Columbia</company>"
     +"<price>10.90</price>"
     +"<year>1985</year>"
    +"</cd>"
    +"<cd>"
    +"<name>Hide your heart</name>"
      +"<artist>Bonnie Tyler</artist>"
      +"<country>UK</country>"
      +"<company>CBS Records</company>"
      +"<price>9.90</price>"
      +"<year>1988</year>"
     +"</cd>"
     +"<cd>"
      +"<name>Greatest Hits</name>"
      +"<artist>Dolly Parton</artist>"
      +"<country>USA</country>"
      +"<company>RCA</company>"
      +"<price>9.90</price>"
      +"<year>1982</year>"
     +"</cd>"
     +"</catalog>";
   //从指定的字符串加载XML文档
   doc.LoadXml(xml);
    //保存文档
   doc.Save("D://cd.xml");
   Label1.Text="创建成功";
   myXml.DocumentSource="D://cd.xml";
  }
  </script>
(2)按照XML的结构一步一步的构建XML文档。首先创建一个空的XML文档,即创建该类的对象;然后在该XML的文档的最头部加入XML的声明段落,通过该类中的CreateNode()方法创建;最后是为XML文档加入元素和属性等。
<script language="C#" runat="server">
  private void Page_Load(object sender, System.EventArgs e)
  {
   XmlDocument doc = new XmlDocument();
   //加入XML的声明
   XmlNode declare = doc.CreateNode(XmlNodeType.XmlDeclaration,"","");
   doc.AppendChild(declare);
   //加入一个根元素catalog
   XmlElement root=doc.CreateElement("","catalog","");
   doc.AppendChild(root);
   //加入cd元素
   XmlElement elem1=doc.CreateElement("vcd");
   root.AppendChild(elem1);
  //加入name元素,值为Maggie May
    XmlElement node1=doc.CreateElement("name");
    XmlText name=doc.CreateTextNode("Maggie May");
    node1.AppendChild(name);
    elem1.AppendChild(node1);
    //加入artist,值为Rod Stewart
    XmlElement node2=doc.CreateElement("artist");
    XmlText artist=doc.CreateTextNode("Rod Stewart");
    node2.AppendChild(artist);
    elem1.AppendChild(node2);
    //加入company元素,值为Pickwick
    XmlElement node3=doc.CreateElement("company");
    XmlText company=doc.CreateTextNode("Pickwick");
    node3.AppendChild(company);
    elem1.AppendChild(node3);
    //保存
    doc.Save("d:\\vcd.xml");
    //重新打开
    XmlDocument xmldoc = new XmlDocument();
    xmldoc.Load("d:\\vcd.xml");
    Label1.Text="创建成功";
    myXml.Document=xmldoc;
  }
  </script>
xmlelement元素继承自xmlnode节点
5.XmlTextReader和XmlTextWriter
(1)XmlTextReader类读取XML文档
XmlTextReader类提供对XML数据流的只读访问。该类位于System.Xml命名空间中
XmlTextReader的一些常用方法:
   Close():将ReadState更改为Closed。
? GetAttribute():获取属性的值。
? GetType():获取当前节点的类型。
? IsStartElement():测试当前内容节点是否开始标记。
? MoveToAttribute():移动到指定的属性。
? MoveToElement():移动到包含当前属性节点的元素。
? MoveToNextAttribute ():移动到下一个属性。
? Read():从流中读取下一个节点。
? ReadAttributeValue():将属性值分析为一个或多个Text、EntityReference或EndEntity节点。
? ReadEndElement():检查当前内容节点是否为结束标记并将读取器推进到下一个节点。
? ReadStartElement():检查当前节点是否为元素并将读取器推进到下一个节点。
? ReadString():将元素或文本节点的内容当做字符串读取。
? ResolveEntity():解析EntityReference节点的实体引用。
? Skip():跳过当前节点的子级。
   XmlTextReader tr=new XmlTextReader(Server.MapPath("peom.xml"));
   while(tr.Read()){
    switch(tr.NodeType){
     //文档声明
     case XmlNodeType.XmlDeclaration:
      Response.Write(Server.HtmlEncode("<?"+tr.Name+tr.Value+"?>")+"</br>");
      break;
     //DOCTYPE
     case XmlNodeType.DocumentType:
      Response.Write(Server.HtmlEncode("
       <!DOCTYPE"+tr.Name+"["+tr.Value+"]")+"</br>");
      break;
     //元素开始
     case XmlNodeType.Element:
      Response.Write(Server.HtmlEncode("<"+tr.Name+">")+"</br>");
      break;
     //字符数据
     case XmlNodeType.Text:
      Response.Write(tr.Value+"</br>");
      break;
     //元素结束
     case XmlNodeType.EndElement:
      Response.Write(Server.HtmlEncode("</"+tr.Name+">")+"</br>");
      break;
     //解释
     case XmlNodeType.Comment:
      Response.Write(Server.HtmlEncode("<!--"+tr.Value+"--!>")+"</br>");
      break;
     case XmlNodeType.Attribute:
      Response.Write(Server.HtmlEncode(tr.Name+"="+tr.Value));
      break;
    }
   }
XmlTextReader类读取XML文档的核心代码。

(2)XmlTextWriter类创建XML文档
XmlTextWriter类提供快速、非缓存、只进方法的编写器,该方法生成包含XML数据的流或XML文档文件。该类位于System.Xml命名空间中,使用这个类来创建XML文件,不需要担心输出是否符合XML规范的问题,同时代码也会变得非常简洁。
XmlTextWriter类的一些常用方法:
? WriteComment():写出包含指定文本的注释<!- -...- ->。
? WriteDocType():写出具有指定名称和可选属性的DOCTYPE声明。
? WriteElementString():写出包含字符串值的元素。
? WriteEndAttribute():关闭上一个WriteStartAttribute调用。
? WriteEndDocument():关闭任何打开的元素或属性并将编写器重新设置为Start状态。
? WriteEndElement():关闭一个元素并弹出相应的命名空间范围。
? WriteEntityRef():按&name;写出实体引用。
? WriteProcessingInstruction():写出在名称和文本之间带有空格的处理指令,如下所示:<?name text?>。
? WriteQualifiedName():写出命名空间限定的名称,此方法查找位于给定命名空间范围内的前缀。
? WriteStartAttribute():书写属性的起始内容。
? WriteStartDocument():书写版本为“1.0”的XML声明。
? WriteStartElement():写出指定的开始标记。
? WriteString():书写给定的文本内容。
  XmlTextWriter writer = new
  XmlTextWriter(Response.OutputStream,Encoding.UTF8);
  //文档开始
  writer.WriteStartDocument();
  //根元素
  writer.WriteStartElement("users");
  //创建元素infor
  writer.WriteStartElement("infor");
  //为元素infor添加属性
  writer.WriteAttributeString("id", "k001");
  writer.WriteElementString("name", "李华");
  writer.WriteElementString("age", "25");
  writer.WriteElementString("email", " lihua@163.com");
  writer.WriteStartElement("Requestinfor");
  writer.WriteAttributeString("time", DateTime.Now.ToString());
  writer.WriteElementString("Type",Request.RequestType);
  writer.WriteElementString("IP",Request.UserHostAddress);
  writer.WriteEndElement();
  writer.WriteEndElement();
  //创建另一个infor元素
  writer.WriteStartElement("infor");
  //为元素infor添加属性
  writer.WriteAttributeString("id", "k002");
  writer.WriteElementString("name", "张忠");
  writer.WriteElementString("age", "30");
  writer.WriteElementString("email"," zhangzhong158@163.com");
  writer.WriteStartElement("Requestinfor");
  writer.WriteAttributeString("time",new DateTime(2007,5,20).ToString());
  writer.WriteElementString("Type",Request.RequestType);
  writer.WriteElementString("IP",Request.UserHostAddress.Replace("127","129"));
  writer.WriteEndElement();
  writer.WriteEndElement();
  writer.WriteEndElement();
  //文档结束
  writer.WriteEndDocument();
  writer.Close();
6.DataSet类读写XML文档
  DataSet ds = new DataSet();
  ds.ReadXml(Server.MapPath("AddressList.xml"));
  dg.DataSource = ds.Tables[0].DefaultView;
  dg.DataBind();
另外,DataSet数据集支持的最直接的XML方法就是GetXml() 和GetXmlSchema()了,该方法只将XML数据或XSD架构作为一个字符串值返回,核心代码如下所示:
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("Order.xml"));
ds.ReadXmlSchema(Server.MapPath("Order.xsd"));
Response.Write(ds.GetXml());
Response.Write(ds.GetXmlSchema());
 (2)使用DataSet编写XML文档示例
DataSet ds=new DataSet();
   DataTable dt=new DataTable("infor");
   //id自动增长
   DataColumn dc=new DataColumn("id");
   dc.DataType=typeof(string);
   dc.AutoIncrement=true; dt.Columns.Add(dc);
   //添加列
   dc=new DataColumn("username",typeof(string));
   //不允许为空
   dc.AllowDBNull=false;
   dt.Columns.Add(dc); dc=new DataColumn("age",typeof(int));
   //默认值
   dc.DefaultValue=25; dt.Columns.Add(dc);
   //添加行
   DataRow row=dt.NewRow();
   row["username"]="小华"; dt.Rows.Add(row);
   //添加行
   DataRow dr=dt.NewRow();
   dr["username"]="Lucy"; dr["age"]=30;
   dt.Rows.Add(dr);
   //添加表
   ds.Tables.Add(dt); ds.AcceptChanges();
   ds.WriteXml(Server.MapPath("infor.xml"),XmlWriteMode.WriteSchema);
(3)DataSet类修改XML文档
   DataSet ds = new DataSet();
   ds.ReadXml(Server.MapPath("Addresslist.xml"));
   //修改前
   d.DataSource=ds.Tables[0].DefaultView;
   d.DataBind();
   //添加
    DataRow tr=ds.Tables[0].NewRow();
    tr["id"]="04";
    tr["name"]="刘圆"; 
    tr["phone"]="1311641230";
    tr["email"]=" liuyuan@163.com";
    ds.Tables[0].Rows.Add(tr);
    //更新
    DataRow row=ds.Tables[0].Rows[0];
    row["email"]=" world451@yahoo.com";
    //删除
    ds.Tables[0].Rows[1].Delete();
    ds.WriteXml(Server.MapPath("newAddresslist.xml"));
    //修改后
    dg.DataSource=ds.Tables[0].DefaultView;
    dg.DataBind();
7.用XLST转换XML
该类主要有以下两种常用方法:
 Load():加载XSLT样式表,包括在xsl:include和xsl:import元素中引用的样式表。
Transform():使用加载的XSLT样式表转换XML数据。该方法有多种重载形式。
该类只有XmlResolver一个属性,用于设置调用Transform方法时解析外部资源XmlResolver对象。
   DataSet ds = new DataSet( );
   //读取XML文档
   ds.ReadXml(Server.MapPath("score.xml"));
   XmlDataDocument xmlDoc = new XmlDataDocument(ds);
   XslTransform xslTran = new XslTransform();
   //加载样式文件
   xslTran.Load(Server.MapPath("score.xsl"));
   XmlTextWriter writer = new XmlTextWriter(
    Server.MapPath("infor.html"),
    System.Text.Encoding.UTF8);
   xslTran.Transform(xmlDoc, null, writer);
   writer.Close();