C# DataSet的內(nèi)容寫成XML時(shí)如何格式化字段數(shù)據(jù)
更新時(shí)間:2009年02月14日 14:13:16 作者:
許多讀者經(jīng)常詢問(wèn)一個(gè)問(wèn)題,那就是在將DataSet的內(nèi)容寫成XML時(shí),如何格式化字段數(shù)據(jù)。最常見(jiàn)的需求,就是希望日期時(shí)間值與數(shù)值數(shù)據(jù)能夠以所需的格式呈現(xiàn)于XML中。
欲達(dá)此目的,可以采用下列兩種作法:
◆使用XmlConvert類。
◆將一個(gè)XSLT轉(zhuǎn)換套用至DataSet數(shù)據(jù)的XML表示。
程序范例
本范例是利用XmlConvert類來(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類。
◆將一個(gè)XSLT轉(zhuǎn)換套用至DataSet數(shù)據(jù)的XML表示。
程序范例
本范例是利用XmlConvert類來(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)行修改。
您可能感興趣的文章:
相關(guān)文章
關(guān)于C#中async/await的用法實(shí)例詳解
這篇文章主要介紹了關(guān)于C#中async/await的用法,今天寫一個(gè)demo徹底搞明白async/await的用法,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02
C#基礎(chǔ)知識(shí)之GetType與typeof的區(qū)別小結(jié)
在比較對(duì)象時(shí),需要了解他們的類型,才能決定他們的值是否能比較。所有的類都從System.Object中繼承了GetType()方法,常常與typeo()運(yùn)算符一起使用。這篇文章主要給大家介紹了關(guān)于C#基礎(chǔ)知識(shí)之GetType與typeof區(qū)別的相關(guān)資料,需要的朋友可以參考下2021-06-06
C# List中FindAll用法的一些簡(jiǎn)單示例
本篇文章只要是對(duì)C# List中FindAll用法的一些簡(jiǎn)單示例進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01
C#導(dǎo)出生成excel文件的方法小結(jié)(xml,html方式)
C#導(dǎo)出生成excel文件的方法小結(jié)(xml,html方式)。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-10-10
C#利用Label標(biāo)簽控件模擬窗體標(biāo)題的移動(dòng)及窗體顏色不斷變換效果
Label標(biāo)簽控件相信對(duì)大家來(lái)說(shuō)都不陌生,下面這篇文章主要給大家介紹了關(guān)于C#利用Label標(biāo)簽控件模擬窗體標(biāo)題的移動(dòng)及窗體顏色不斷變換效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-12-12
C#實(shí)現(xiàn)json的序列化和反序列化實(shí)例代碼
這篇文章主要介紹了C#實(shí)現(xiàn)json的序列化和反序列化實(shí)例代碼,有需要的朋友可以參考一下2013-12-12
C#數(shù)據(jù)結(jié)構(gòu)之字符串(string)詳解
這篇文章主要介紹了C#數(shù)據(jù)結(jié)構(gòu)之字符串(string),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04

