说到用.NET来创建XML文件,大家都会想到System.Xml.XmlDocument这个类吧.但是我在实际开发过程中却是用的另外一种方法,(用数据集直接写入XML文件).今天拿给大家共享一下:
比如要生成这样一个XML文件
然后代码如下:
将上面那个XML改造一下:
生成代码如下:
如果XML文件要修改,可以用 ds.ReadXml("books.xml",XmlReadMode.IgnoreSchema);来填充dataset,然后修改数据集实例化对象的数据,最后再用ds.WriteXml("books.xml",XmlWriteMode.IgnoreSchema);保存.
我在这里只给大家一个思路和方法,具体的问题要看使用什么方法更简单更直观.以便后期维护.
比如要生成这样一个XML文件
<?
xml version="1.0" encoding="utf-8"
?>
< books >
< book >
< name > name1 </ name >
< price > 22.8 </ price >
</ book >
< book >
< name > name2 </ name >
< price > 25.8 </ price >
</ book >
</ books >
我们可以用可视化数据集生成器:创建一个名为books.xsd的数据集:
< books >
< book >
< name > name1 </ name >
< price > 22.8 </ price >
</ book >
< book >
< name > name2 </ name >
< price > 25.8 </ price >
</ book >
</ books >
然后代码如下:
DataSet ds
=
new
books();
DataTable dt = ds.Tables[ " book " ];
DataRow dr = dt.NewRow();
dr[ " name " ] = " name1 " ;
dr[ " price " ] = " 22.8 " ;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[ " name " ] = " name2 " ;
dr[ " price " ] = " 25.8 " ;
dt.Rows.Add(dr);
ds.WriteXml( " books.xml " ,XmlWriteMode.IgnoreSchema);
是不是十分直观,只需操作Dataset就够了.这个简单的可能说明不了什么问题,再来一个复杂的:
DataTable dt = ds.Tables[ " book " ];
DataRow dr = dt.NewRow();
dr[ " name " ] = " name1 " ;
dr[ " price " ] = " 22.8 " ;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[ " name " ] = " name2 " ;
dr[ " price " ] = " 25.8 " ;
dt.Rows.Add(dr);
ds.WriteXml( " books.xml " ,XmlWriteMode.IgnoreSchema);
将上面那个XML改造一下:
<?
xml version="1.0" encoding="utf-8"
?>
< books >
< book id =1>
<name > name1 </ name >
< price > 22.8 </ price >
< detail >
< address > beijing </ address >
< author > mike </ author >
< time > 2004-10-09 </ time >
</ detail >
</ book >
< book id =2>
<name > name2 </ name >
< price > 25.8 </ price >
< detail >
< address > shanghai </ address >
< author > joe </ author >
< time > 2005-09-09 </ time >
</ detail >
</ book >
</ books >
这样算是一个比较复杂的了吧,节点多,而且带属性.同样的,我们要设计一个dataset,不过和上面的有些不同,如下:
< books >
< book id =1>
<name > name1 </ name >
< price > 22.8 </ price >
< detail >
< address > beijing </ address >
< author > mike </ author >
< time > 2004-10-09 </ time >
</ detail >
</ book >
< book id =2>
<name > name2 </ name >
< price > 25.8 </ price >
< detail >
< address > shanghai </ address >
< author > joe </ author >
< time > 2005-09-09 </ time >
</ detail >
</ book >
</ books >
生成代码如下:
DataSet ds
=
new
books();
DataTable dt = ds.Tables[ " book " ];
DataRow dr = dt.NewRow();
dr[ " ID " ] = " 1 " ;
dr[ " name " ] = " name1 " ;
dr[ " price " ] = " 22.8 " ;
dt.Rows.Add(dr);
DataTable dt2 = ds.Tables[ " detail " ];
DataRow dr2 = dt2.NewRow();
dr2[ " address " ] = " beijing " ;
dr2[ " author " ] = " mike " ;
dr2[ " time " ] = " 2004-10-09 " ;
dt2.Rows.Add(dr2);
dr2.SetParentRow(dr);
dr = dt.NewRow();
dr[ " ID " ] = " 2 " ;
dr[ " name " ] = " name2 " ;
dr[ " price " ] = " 25.8 " ;
dt.Rows.Add(dr);
dt2 = ds.Tables[ " detail " ];
dr2 = dt2.NewRow();
dr2[ " address " ] = " shanghai " ;
dr2[ " author " ] = " joe " ;
dr2[ " time " ] = " 2005-09-09 " ;
dt2.Rows.Add(dr2);
dr2.SetParentRow(dr);
ds.WriteXml( " books.xml " ,XmlWriteMode.IgnoreSchema);
是不是感觉想在操作数据库啊,其实就是.以上因为做例子所以数据都是手工加的.在实际应用中,数据集使用通过ADO.net Fill进去的.这样要生成XML文件就只需关心数据,不必关心怎样生成了.一切都是可视化.数据结构完全可以通过Dataset来反映.
DataTable dt = ds.Tables[ " book " ];
DataRow dr = dt.NewRow();
dr[ " ID " ] = " 1 " ;
dr[ " name " ] = " name1 " ;
dr[ " price " ] = " 22.8 " ;
dt.Rows.Add(dr);
DataTable dt2 = ds.Tables[ " detail " ];
DataRow dr2 = dt2.NewRow();
dr2[ " address " ] = " beijing " ;
dr2[ " author " ] = " mike " ;
dr2[ " time " ] = " 2004-10-09 " ;
dt2.Rows.Add(dr2);
dr2.SetParentRow(dr);
dr = dt.NewRow();
dr[ " ID " ] = " 2 " ;
dr[ " name " ] = " name2 " ;
dr[ " price " ] = " 25.8 " ;
dt.Rows.Add(dr);
dt2 = ds.Tables[ " detail " ];
dr2 = dt2.NewRow();
dr2[ " address " ] = " shanghai " ;
dr2[ " author " ] = " joe " ;
dr2[ " time " ] = " 2005-09-09 " ;
dt2.Rows.Add(dr2);
dr2.SetParentRow(dr);
ds.WriteXml( " books.xml " ,XmlWriteMode.IgnoreSchema);
如果XML文件要修改,可以用 ds.ReadXml("books.xml",XmlReadMode.IgnoreSchema);来填充dataset,然后修改数据集实例化对象的数据,最后再用ds.WriteXml("books.xml",XmlWriteMode.IgnoreSchema);保存.
我在这里只给大家一个思路和方法,具体的问题要看使用什么方法更简单更直观.以便后期维护.