C# DataSet的內(nèi)容寫(xiě)成XML時(shí)如何格式化字段數(shù)據(jù)
更新時(shí)間:2009年02月14日 14:13:16 作者:
許多讀者經(jīng)常詢問(wèn)一個(gè)問(wèn)題,那就是在將DataSet的內(nèi)容寫(xiě)成XML時(shí),如何格式化字段數(shù)據(jù)。最常見(jiàn)的需求,就是希望日期時(shí)間值與數(shù)值數(shù)據(jù)能夠以所需的格式呈現(xiàn)于XML中。
欲達(dá)此目的,可以采用下列兩種作法:
◆使用XmlConvert類(lèi)。
◆將一個(gè)XSLT轉(zhuǎn)換套用至DataSet數(shù)據(jù)的XML表示。
程序范例
本范例是利用XmlConvert類(lèi)來(lái)完成字段的格式化操作。
// 導(dǎo)入命名空間。
using System.Xml;
using System.Data.SqlClient;
using System.IO;
private void btnWriteDataSetToXml_Click(object sender, EventArgs e)
{
string myXmlFile = @"C:\DataSetOutputXml.xml";
try
{
// 建立一個(gè) XmlTextReader 對(duì)象來(lái)讀取 XML 數(shù)據(jù)。
using(XmlTextReader myXmlReader =
new XmlTextReader(ds.GetXml(), XmlNodeType.Element, null))
{
// 使用指定的文件與編碼方式來(lái)建立一個(gè) XmlTextWriter 對(duì)象。
using(System.Xml.XmlTextWriter myXmlWriter =
new System.Xml.XmlTextWriter(myXmlFile, Encoding.UTF8))
{
myXmlWriter.Formatting = Formatting.Indented;
myXmlWriter.Indentation = 4;
myXmlWriter.WriteStartDocument();
string elementName = "";
// 解析并顯示每一個(gè)節(jié)點(diǎn)。
while(myXmlReader.Read())
{
switch(myXmlReader.NodeType)
{
case XmlNodeType.Element:
myXmlWriter.WriteStartElement(myXmlReader.Name);
elementName = myXmlReader.Name;
break;
case XmlNodeType.Text:
switch(elementName.ToLower())
{
case "出生日期":
// 要求轉(zhuǎn)換成字符串的日期時(shí)間數(shù)據(jù)采用自定義的格式字符串來(lái)格式化。
myXmlWriter.WriteString(XmlConvert.ToDateTime(myXmlReader.Value,
XmlDateTimeSerializationMode.Local).ToString(
"yyyy 年 MMMM dd 號(hào) dddd,時(shí)間 HH 點(diǎn) mm 分 ss 秒"));
break;
case "雇用日期":
case "加薪日期":
// 要求轉(zhuǎn)換成字符串的日期時(shí)間數(shù)據(jù)采用簡(jiǎn)短日期模式。
myXmlWriter.WriteString(XmlConvert.ToDateTime(myXmlReader.Value,
XmlDateTimeSerializationMode.Local).ToString("d"));
break;
case "起薪":
case "目前薪資":
// 要求轉(zhuǎn)換成字符串的薪資值采用貨幣格式。
myXmlWriter.WriteString(XmlConvert.ToDecimal(
myXmlReader.Value).ToString("c"));
break;
default:
myXmlWriter.WriteString(myXmlReader.Value);
break;
}
break;
case XmlNodeType.EndElement:
myXmlWriter.WriteEndElement();
break;
}
}
}
}
// 讀取所輸出的 Xml 文件,并將其內(nèi)容顯示在 TextBox 文本框中。
txtXmlResult.Text = File.ReadAllText(myXmlFile);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
注:switch中每個(gè)case后面的值就是列名,請(qǐng)讀者根據(jù)需要進(jìn)行修改。
◆使用XmlConvert類(lèi)。
◆將一個(gè)XSLT轉(zhuǎn)換套用至DataSet數(shù)據(jù)的XML表示。
程序范例
本范例是利用XmlConvert類(lèi)來(lái)完成字段的格式化操作。
復(fù)制代碼 代碼如下:
// 導(dǎo)入命名空間。
using System.Xml;
using System.Data.SqlClient;
using System.IO;
private void btnWriteDataSetToXml_Click(object sender, EventArgs e)
{
string myXmlFile = @"C:\DataSetOutputXml.xml";
try
{
// 建立一個(gè) XmlTextReader 對(duì)象來(lái)讀取 XML 數(shù)據(jù)。
using(XmlTextReader myXmlReader =
new XmlTextReader(ds.GetXml(), XmlNodeType.Element, null))
{
// 使用指定的文件與編碼方式來(lái)建立一個(gè) XmlTextWriter 對(duì)象。
using(System.Xml.XmlTextWriter myXmlWriter =
new System.Xml.XmlTextWriter(myXmlFile, Encoding.UTF8))
{
myXmlWriter.Formatting = Formatting.Indented;
myXmlWriter.Indentation = 4;
myXmlWriter.WriteStartDocument();
string elementName = "";
// 解析并顯示每一個(gè)節(jié)點(diǎn)。
while(myXmlReader.Read())
{
switch(myXmlReader.NodeType)
{
case XmlNodeType.Element:
myXmlWriter.WriteStartElement(myXmlReader.Name);
elementName = myXmlReader.Name;
break;
case XmlNodeType.Text:
switch(elementName.ToLower())
{
case "出生日期":
// 要求轉(zhuǎn)換成字符串的日期時(shí)間數(shù)據(jù)采用自定義的格式字符串來(lái)格式化。
myXmlWriter.WriteString(XmlConvert.ToDateTime(myXmlReader.Value,
XmlDateTimeSerializationMode.Local).ToString(
"yyyy 年 MMMM dd 號(hào) dddd,時(shí)間 HH 點(diǎn) mm 分 ss 秒"));
break;
case "雇用日期":
case "加薪日期":
// 要求轉(zhuǎn)換成字符串的日期時(shí)間數(shù)據(jù)采用簡(jiǎn)短日期模式。
myXmlWriter.WriteString(XmlConvert.ToDateTime(myXmlReader.Value,
XmlDateTimeSerializationMode.Local).ToString("d"));
break;
case "起薪":
case "目前薪資":
// 要求轉(zhuǎn)換成字符串的薪資值采用貨幣格式。
myXmlWriter.WriteString(XmlConvert.ToDecimal(
myXmlReader.Value).ToString("c"));
break;
default:
myXmlWriter.WriteString(myXmlReader.Value);
break;
}
break;
case XmlNodeType.EndElement:
myXmlWriter.WriteEndElement();
break;
}
}
}
}
// 讀取所輸出的 Xml 文件,并將其內(nèi)容顯示在 TextBox 文本框中。
txtXmlResult.Text = File.ReadAllText(myXmlFile);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
注:switch中每個(gè)case后面的值就是列名,請(qǐng)讀者根據(jù)需要進(jìn)行修改。
您可能感興趣的文章:
- C#中Decimal類(lèi)型截取保留N位小數(shù)并且不進(jìn)行四舍五入操作
- C#實(shí)現(xiàn)百分比轉(zhuǎn)小數(shù)的方法
- C#中計(jì)算時(shí)間差中的小數(shù)問(wèn)題解決
- C# double和decimal數(shù)據(jù)類(lèi)型以截?cái)嗟姆绞奖A糁付ǖ男?shù)位數(shù)
- c#匹配整數(shù)和小數(shù)的正則表達(dá)式
- C# 小數(shù)位數(shù)保留的方法集錦
- c#格式化數(shù)字的方法
- C#適用于like語(yǔ)句的SQL格式化函數(shù)
- C#小數(shù)點(diǎn)格式化用法小結(jié)
相關(guān)文章
C#實(shí)現(xiàn)寫(xiě)系統(tǒng)日志的方法
這篇文章主要介紹了C#實(shí)現(xiàn)寫(xiě)系統(tǒng)日志的方法,涉及C#針對(duì)系統(tǒng)日志的創(chuàng)建、寫(xiě)入及刪除等技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-08-08
C#中實(shí)現(xiàn)線程同步lock關(guān)鍵字的用法詳解
實(shí)現(xiàn)線程同步的第一種方式是我們經(jīng)常使用的lock關(guān)鍵字,它將包圍的語(yǔ)句塊標(biāo)記為臨界區(qū),這樣一次只有一個(gè)線程進(jìn)入臨界區(qū)并執(zhí)行代碼,接下來(lái)通過(guò)本文給大家介紹C#中實(shí)現(xiàn)線程同步lock關(guān)鍵字的用法詳解,一起看看吧2016-07-07
winform下實(shí)現(xiàn)win7 Aero磨砂效果實(shí)現(xiàn)代碼
winform下實(shí)現(xiàn)win7 Aero磨砂效果實(shí)現(xiàn)代碼,需要的朋友可以參考下2012-03-03
C#面向?qū)ο筇卣鞯木唧w實(shí)現(xiàn)及作用詳解
所有的面相對(duì)象思想,歸根結(jié)底是為了簡(jiǎn)化代碼,減少代碼量,構(gòu)建更符合現(xiàn)實(shí)生活邏輯的程序代碼,從而減輕程序員的負(fù)擔(dān)。不能一味地或者說(shuō)刻意地去使用面相對(duì)象的思想而忽略了程序所實(shí)現(xiàn)的功能或者框架,要根據(jù)實(shí)際情況2013-10-10

