(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", "
[email protected]");
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","
[email protected]");
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"]="
[email protected]";
ds.Tables[0].Rows.Add(tr);
//更新
DataRow row=ds.Tables[0].Rows[0];
row["email"]="
[email protected]";
//删除
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();