在C#中对XML文件的操作主要用到了XmlDocument类,它可对XML的DOM树进行解析。
1、加载现有的XML文件
XmlDocument dd = new XmlDocument();
dd.Load(Server.MapPath("tt.xml"));
2、保存XmlDocument对象到文件
dd.Save(Server.MapPath("tt.xml"));
3、向XmlDocument对象中加入XML声明
XmlDocument xd = new XmlDocument();
xd.AppendChild(xd.CreateXmlDeclaration("1.0", "utf-8", "yes"));
4、取得指字的节点对象(XmlNode)
xn.FirstChild; //返回XmlNode对象,表示取得当前节点下的第一个子节点。
xn.NextSibling; //返回XmlNode对象,表示取得当前节点的下一个兄弟节点。
xn.PreviousSibling; //返回XmlNode对象,表示取得当前节点的上一个兄弟节点。
xn.LastChild; //返回XmlNode对象,表示取得当前节点下的最后一个子节点。
xn.SelectSingleNode(); //返回XmlNode对象,根据节点元素名称返回当前节点下的第一个子节点。
xn.SelectNodes(); //返回XmlNodeList集合对象,根据节点元素名称返回当前节点下该名称的所有子节点。
xd.GetElementById();
xd.GetElementsByTagName();
5、为指定的元素加入子元素
XmlDocument xd = new XmlDocument();
XmlNode root = xd.CreateElement("Root");
xd.AppendChild(root);
6、移除该元素下的指定子元素
xd.RemoveChild(xmlnode);
7、修改该元素的元素内容
xd.InnerXml = "...."
8、为元素添加属性
xn.Attributes.Append(xd.CreateAttribute("name"));
xn.Attributes["name"].Value = "张三";
9、把数据库中表的内容转存为XML文件
SqlConnection conn = new SqlConnection("server=.;database=mydb;uid=sa;pwd=123");
SqlCommand cmd = conn.CreateCommand();
//把列的内容作为属性,根元素名子为<root>
cmd.CommandText = "select * from student for xml auto,root('root')";
conn.Open();
XmlReader xr = cmd.ExecuteXmlReader();
XmlDocument dd = new XmlDocument();
dd.Load(xr); ;
XmlNode xx = dd.FirstChild; //取得根元素
XmlDeclaration xd = dd.CreateXmlDeclaration("1.0", "utf-8", "yes"); //创建XML声明
dd.InsertBefore(xd,xx); //在根元素前加入XML声明
dd.Save(Server.MapPath("tt.config"));
conn.Close();
执行结果:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<root>
<student sno="101" sname="李军" ssex="男" sbirthday="1976-02-20T00:00:00" class="95033" />
<student sno="103" sname="陆君" ssex="男" sbirthday="1974-06-03T00:00:00" class="95031" />
<student sno="105" sname="匡明" ssex="男" sbirthday="1975-10-02T00:00:00" class="95031" />
<student sno="107" sname="王丽" ssex="女" sbirthday="1976-01-23T00:00:00" class="95033" />
<student sno="108" sname="曾华" ssex="男" sbirthday="1977-09-01T00:00:00" class="95033" />
<student sno="109" sname="王芳" ssex="女" sbirthday="1975-02-10T00:00:00" class="95031" />
</root>
如果把上面的SqlCommand对象的CommandText改为如下:
cmd.CommandText = "select * from student for xml auto,root('root'),elements";
那会把每列的名子作为子元素出现
执行结果如下:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<root>
<student>
<sno>101</sno>
<sname>李军</sname>
<ssex>男</ssex>
<sbirthday>1976-02-20T00:00:00</sbirthday>
<class>95033</class>
</student>
<student>
<sno>103</sno>
<sname>陆君</sname>
<ssex>男</ssex>
<sbirthday>1974-06-03T00:00:00</sbirthday>
<class>95031</class>
</student>
<student>
<sno>105</sno>
<sname>匡明</sname>
<ssex>男</ssex>
<sbirthday>1975-10-02T00:00:00</sbirthday>
<class>95031</class>
</student>
<student>
<sno>107</sno>
<sname>王丽</sname>
<ssex>女</ssex>
<sbirthday>1976-01-23T00:00:00</sbirthday>
<class>95033</class>
</student>
<student>
<sno>108</sno>
<sname>曾华</sname>
<ssex>男</ssex>
<sbirthday>1977-09-01T00:00:00</sbirthday>
<class>95033</class>
</student>
<student>
<sno>109</sno>
<sname>王芳</sname>
<ssex>女</ssex>
<sbirthday>1975-02-10T00:00:00</sbirthday>
<class>95031</class>
</student>
</root>