可以采用下列两种作法:
◆使用XmlConvert类。
◆将一个XSLT转换套用至DataSet数据的XML表示。
如果使用这个方法:
XML转换的时候,它默认是这种格式:如'2007-08-17T19:57:39.5+08:00'
但我们要的结果确是这样,如图:
// 导入命名空间。
using System.Xml;
using System.Data.SqlClient;
using System.IO;private void btnWriteDataSetToXml_Click(object sender, EventArgs e)
{
string myXmlFile = @"C:\DataSetOutputXml.xml";try
{
// 建立一个 XmlTextReader 对象来读取 XML 数据。
using(XmlTextReader myXmlReader =
new XmlTextReader(ds.GetXml(), XmlNodeType.Element, null))
{
// 使用指定的文件与编码方式来建立一个 XmlTextWriter 对象。
using(System.Xml.XmlTextWriter myXmlWriter =
new System.Xml.XmlTextWriter(myXmlFile, Encoding.UTF8))
{
myXmlWriter.Formatting = Formatting.Indented;
myXmlWriter.Indentation = 4;
myXmlWriter.WriteStartDocument();string elementName = "";
// 解析并显示每一个节点。
while(myXmlReader.Read())
{
switch(myXmlReader.NodeType)
{
case XmlNodeType.Element:
myXmlWriter.WriteStartElement(myXmlReader.Name);
elementName = myXmlReader.Name;break;
case XmlNodeType.Text:
switch(elementName.ToLower())
{
case "出生日期":
// 要求转换成字符串的日期时间数据采用自定义的格式字符串来格式化。
myXmlWriter.WriteString(XmlConvert.ToDateTime(myXmlReader.Value,
XmlDateTimeSerializationMode.Local).ToString(
"yyyy 年 MMMM dd 号 dddd,时间 HH 点 mm 分 ss 秒"));break;
case "雇用日期":
case "加薪日期":
// 要求转换成字符串的日期时间数据采用简短日期模式。
myXmlWriter.WriteString(XmlConvert.ToDateTime(myXmlReader.Value,
XmlDateTimeSerializationMode.Local).ToString("d"));break;
case "起薪":
case "目前薪资":
// 要求转换成字符串的薪资值采用货币格式。
myXmlWriter.WriteString(XmlConvert.ToDecimal(
myXmlReader.Value).ToString("c"));break;
default:
myXmlWriter.WriteString(myXmlReader.Value);break;
}break;
case XmlNodeType.EndElement:
myXmlWriter.WriteEndElement();break;
}
}
}
}// 读取所输出的 Xml 文件,并将其内容显示在 TextBox 文本框中。
txtXmlResult.Text = File.ReadAllText(myXmlFile);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
-----------------------------------------------------------------------
// Change SQL Server name, User Id and Password in following connection string.
string conn = "Server=SQLServerName; database=Northwind; user id=<username>; password=<strong password>";
SqlConnection connection = new SqlConnection();
connection.ConnectionString = conn;
DataSet objDataSet = new DataSet();
SqlDataAdapter objAdapter = new SqlDataAdapter();
SqlCommand objCmd = new SqlCommand();
// Retrieve the first 10 records from the employees table.
objCmd.CommandText = "select top 10 FirstName,BirthDate from employees";
objCmd.Connection = connection;
objAdapter.SelectCommand = objCmd;
objAdapter.Fill(objDataSet);
connection.Close();
// Create an instance of XmlTextReader class that reads the XML data.
XmlTextReader xmlReader = new XmlTextReader(objDataSet.GetXml(), XmlNodeType.Element, null);
Response.ContentType = "text/xml";
XmlTextWriter xmlWriter = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);
xmlWriter.Indentation = 4;
xmlWriter.WriteStartDocument();
string elementName = "";
// Parse and display each node.
while(xmlReader.Read())
{
switch(xmlReader.NodeType)
{
case XmlNodeType.Element:
xmlWriter.WriteStartElement(xmlReader.Name);
elementName = xmlReader.Name;
break;
case XmlNodeType.Text:
if(elementName.ToLower() == "birthdate")
xmlWriter.WriteString(XmlConvert.ToDateTime(xmlReader.Value).ToString());
else
xmlWriter.WriteString(xmlReader.Value);
break;
case XmlNodeType.EndElement:
xmlWriter.WriteEndElement();
break;
}
}
xmlWriter.Close();
----------------------------------------------
还有一种方法,如下,但我不想使用,因为我的查询字段是不确定的.
---------------------------------------------------------------
1、就是在写入XML文件前,把日期字段中的数据改为楼主要的格式。
2、就是写入了XML文件之后再打开XML文件来改!!!
---------------------------------------------------------------
private void Button1_Click(object sender, System.EventArgs e)
{
string strSql = "select name,age,d from student";
SqlDataAdapter da = new SqlDataAdapter(strSql,Cnn);
SqlCommandBuilder sb = new SqlCommandBuilder(da);
DataSet ds = new DataSet();
da.Fill(ds,"student");
// 创建xmltextwriter
XmlTextWriter writer = new XmlTextWriter("E://ASP//aa.xml",Encoding.UTF8);
//开始写
writer.WriteStartDocument();
writer.WriteStartElement("NewDataSet");
for(int i=0;i<ds.Tables[0].Rows.Count;i++)
{
writer.WriteStartElement("student");
writer.WriteElementString("姓名", ds.Tables[0].Rows[i]["name"].ToString());
writer.WriteElementString("年龄",ds.Tables[0].Rows[i]["age"].ToString());
writer.WriteElementString("日期",ds.Tables[0].Rows[i]["d"].ToString().Substring(0,10));
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close();
}
上面的方法可以解决你的所有问题。
你可以把DS换成DR或者你想要的。
上面生成的XML文件格式如下:
<?xml version="1.0" encoding="utf-8" ?>
<NewDataSet>
<student>
<姓名>John</姓名>
<年龄>10</年龄>
<日期>2004-10-6</日期>
</student>
</NewDataSet>
---------------------------------------------------------------