C# DataSet的內(nèi)容寫成XML時如何格式化字段數(shù)據(jù)
更新時間:2009年02月14日 14:13:16 作者:
許多讀者經(jīng)常詢問一個問題,那就是在將DataSet的內(nèi)容寫成XML時,如何格式化字段數(shù)據(jù)。最常見的需求,就是希望日期時間值與數(shù)值數(shù)據(jù)能夠以所需的格式呈現(xiàn)于XML中。
欲達(dá)此目的,可以采用下列兩種作法:
◆使用XmlConvert類。
◆將一個XSLT轉(zhuǎn)換套用至DataSet數(shù)據(jù)的XML表示。
程序范例
本范例是利用XmlConvert類來完成字段的格式化操作。
// 導(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
{
// 建立一個 XmlTextReader 對象來讀取 XML 數(shù)據(jù)。
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 = "";
// 解析并顯示每一個節(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ù)據(jù)采用自定義的格式字符串來格式化。
myXmlWriter.WriteString(XmlConvert.ToDateTime(myXmlReader.Value,
XmlDateTimeSerializationMode.Local).ToString(
"yyyy 年 MMMM dd 號 dddd,時間 HH 點(diǎn) mm 分 ss 秒"));
break;
case "雇用日期":
case "加薪日期":
// 要求轉(zhuǎn)換成字符串的日期時間數(shù)據(jù)采用簡短日期模式。
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中每個case后面的值就是列名,請讀者根據(jù)需要進(jìn)行修改。
◆使用XmlConvert類。
◆將一個XSLT轉(zhuǎn)換套用至DataSet數(shù)據(jù)的XML表示。
程序范例
本范例是利用XmlConvert類來完成字段的格式化操作。
復(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
{
// 建立一個 XmlTextReader 對象來讀取 XML 數(shù)據(jù)。
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 = "";
// 解析并顯示每一個節(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ù)據(jù)采用自定義的格式字符串來格式化。
myXmlWriter.WriteString(XmlConvert.ToDateTime(myXmlReader.Value,
XmlDateTimeSerializationMode.Local).ToString(
"yyyy 年 MMMM dd 號 dddd,時間 HH 點(diǎn) mm 分 ss 秒"));
break;
case "雇用日期":
case "加薪日期":
// 要求轉(zhuǎn)換成字符串的日期時間數(shù)據(jù)采用簡短日期模式。
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中每個case后面的值就是列名,請讀者根據(jù)需要進(jìn)行修改。
相關(guān)文章
C#中實(shí)現(xiàn)線程同步lock關(guān)鍵字的用法詳解
實(shí)現(xiàn)線程同步的第一種方式是我們經(jīng)常使用的lock關(guān)鍵字,它將包圍的語句塊標(biāo)記為臨界區(qū),這樣一次只有一個線程進(jìn)入臨界區(qū)并執(zhí)行代碼,接下來通過本文給大家介紹C#中實(shí)現(xiàn)線程同步lock關(guān)鍵字的用法詳解,一起看看吧2016-07-07winform下實(shí)現(xiàn)win7 Aero磨砂效果實(shí)現(xiàn)代碼
winform下實(shí)現(xiàn)win7 Aero磨砂效果實(shí)現(xiàn)代碼,需要的朋友可以參考下2012-03-03C#面向?qū)ο筇卣鞯木唧w實(shí)現(xiàn)及作用詳解
所有的面相對象思想,歸根結(jié)底是為了簡化代碼,減少代碼量,構(gòu)建更符合現(xiàn)實(shí)生活邏輯的程序代碼,從而減輕程序員的負(fù)擔(dān)。不能一味地或者說刻意地去使用面相對象的思想而忽略了程序所實(shí)現(xiàn)的功能或者框架,要根據(jù)實(shí)際情況2013-10-10