Xml与DataTable相互转换方法

本文深入探讨了音乐领域内的艺术家如TheChi-lites、Babyface、MariaArredondo及LeonaLewis等人的作品,涵盖了从1972年的经典到2004年至2008年的现代音乐。通过详细的歌曲信息展示,包括艺术家、音乐风格、专辑名称及发行年份,揭示了音乐与技术的融合,以及如何将XML结构的音乐数据转换为易于管理和分析的DataTable形式。文章还介绍了验证XML架构的方法,并提供了XML转换为文本的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

   
   
<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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值