Xml与DataTable相互转换方法

Xml文件:xmlsample.xml

 

代码
   
   
< music >
< song >
< artist > The Chi - lites </ artist >
< genre > Soul </ genre >
< album > A lonely man </ album >
< year > 1972 </ year >
</ song >
< song >
< artist > Babyface </ artist >
< genre > R & amp;B </ genre >
< album > unknown </ album >
< year ></ year >
</ song >
< song >
< artist > Babyface </ artist >
< genre > R & amp;B </ genre >
< album > The essential babyface </ album >
< year > 2001 </ year >
</ song >
< song >
< artist > Babyface </ artist >
< genre > R & amp;B </ genre >
< album > Grown and sexy </ album >
< year > 2005 </ year >
</ song >
< song >
< artist > Maria Arredondo </ artist >
< genre > Pop </ genre >
< album > Not going under </ album >
< year > 2004 </ year >
</ song >
< song >
< artist > Leona Lewis </ artist >
< genre > Pop </ genre >
< album > Unknown </ album >
< year > 2008 </ year >
</ song >
< song >
< artist > Usher </ artist >
< genre > R & amp;B </ genre >
< album > Usher </ album >
< year > 2008 </ year >
</ song >
< song >
< artist > Christina Aguilera </ artist >
< genre > Blues </ genre >
< album > Back to basics </ album >
< year > 2004 </ year >
</ song >
< song >
< artist > Sting </ artist >
< genre > Pop </ genre >
< album > Shape of my heart </ album >
< year ></ year >
</ song >
</ music >

 

代码文件:

 

代码
   
   
class Program
{
static void Main( string [] args)
{
VaildationXmlSchema();
}

// Xml结构的文件读到DataTable中
static DataTable XmlToDataTableByFile()
{
string fileName = " E://xmlsample.xml " ;
XmlDocument doc
= new XmlDocument();
doc.Load(fileName);

DataTable dt
= new DataTable( " song " );
// 以第一个元素song的子元素建立表结构
XmlNode songNode = doc.SelectSingleNode( " /music/song[1] " );
string colName;
if (songNode != null )
{
for ( int i = 0 ; i < songNode.ChildNodes.Count; i ++ )
{
colName
= songNode.ChildNodes.Item(i).Name;
dt.Columns.Add(colName);
}
}
DataSet ds
= new DataSet( " music " );
ds.Tables.Add(dt);

// Xml所有song元素的子元素读到表song中,当然用dt也可以读。
ds.ReadXml(fileName);
return dt;
}

// Xml结构的字符中读到DataTable中
static void XmlToDataTableByString()
{
string fileName = " E://xmlsample.xml " ;
XmlDocument doc
= new XmlDocument();
doc.Load(fileName);

DataTable dt
= new DataTable( " song " );
// 以第一个元素song的子元素建立表结构
XmlNode songNode = doc.SelectSingleNode( " /music/song[1] " );
string colName;
if (songNode != null )
{
for ( int i = 0 ; i < songNode.ChildNodes.Count; i ++ )
{
colName
= songNode.ChildNodes.Item(i).Name;
dt.Columns.Add(colName);
}
}
DataSet ds
= new DataSet();
ds.Tables.Add(dt);

// 获取Xml字串
string xmlString = doc.InnerXml;
StringReader sr
= new StringReader(xmlString);
XmlTextReader xr
= new XmlTextReader(sr);
// Xml所有song元素的子元素读到表song中,当然用dt也可以读。
ds.ReadXml(xr);
}

// DataTable转换成Xml结构的文本
static void DataTableToXml()
{
// dt的名为song,ds的名为music
DataTable dt = XmlToDataTableByFile();

// 保存Xml验证架构
dt.WriteXmlSchema( " E://xmlsample.xsd " );

// dt写成Xml结构
System.IO.TextWriter tw = new System.IO.StringWriter();
dt.WriteXml(tw);
string xml = tw.ToString();
}

// 验证Xml结构
static void VaildationXmlSchema()
{
XmlSchemaSet
set = new XmlSchemaSet();
set .Add( "" , " E://xmlsample.xsd " );

XmlDocument doc
= new XmlDocument();
doc.Schemas
= set ;

try
{
doc.Load(
" E://xmlsample.xml " );
doc.Validate(
new ValidationEventHandler(Vaildation));
}
catch (Exception e)
{
Console.Write(e.Message);
}
}
static void Vaildation( object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
throw e.Exception;
case XmlSeverityType.Warning:
throw e.Exception;
}
}
}

 

生成的验证Xml文件:xmlsample.xsd

 

代码
   
   
<? xml version = " 1.0 " standalone = " yes " ?>
< xs:schema id = " music " xmlns = "" xmlns:xs = " http://www.w3.org/2001/XMLSchema " xmlns:msdata = " urn:schemas-microsoft-com:xml-msdata " >
< xs:element name = " music " msdata:IsDataSet = " true " msdata:MainDataTable = " song " msdata:UseCurrentLocale = " true " >
< xs:complexType >
< xs:choice minOccurs = " 0 " maxOccurs = " unbounded " >
< xs:element name = " song " >
< xs:complexType >
< xs:sequence >
< xs:element name = " artist " type = " xs:string " minOccurs = " 0 " />
< xs:element name = " genre " type = " xs:string " minOccurs = " 0 " />
< xs:element name = " album " type = " xs:string " minOccurs = " 0 " />
< xs:element name = " year " type = " xs:string " minOccurs = " 0 " />
</ xs:sequence >
</ xs:complexType >
</ xs:element >
</ xs:choice >
</ xs:complexType >
</ xs:element >
</ xs:schema >
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值