说到用.NET来创建XML文件,大家都会想到System.Xml.XmlDocument这个类吧.但是我在实际开发过程中却是用的另外一种方法,(用数据集直接写入XML文件).今天拿给大家共享一下:
比如要生成这样一个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的数据集:
然后代码如下:
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就够了.这个简单的可能说明不了什么问题,再来一个复杂的:
将上面那个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,不过和上面的有些不同,如下:
生成代码如下:
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来反映.
如果XML文件要修改,可以用 ds.ReadXml("books.xml",XmlReadMode.IgnoreSchema);来填充dataset,然后修改数据集实例化对象的数据,最后再用ds.WriteXml("books.xml",XmlWriteMode.IgnoreSchema);保存.
我在这里只给大家一个思路和方法,具体的问题要看使用什么方法更简单更直观.以便后期维护.