C#中将DataSet的内容写成XML时如何格式化字段数据

本文介绍了两种方法将C#中的DataSet内容转换为XML,并格式化特定字段,例如日期字段。一种是利用XmlConvert类,另一种是通过XmlTextReader和XmlTextWriter进行解析和写入。示例代码展示了如何在遇到日期字段时将其转换为指定格式。
摘要由CSDN通过智能技术生成

可以采用下列两种作法:

◆使用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>
---------------------------------------------------------------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值