代码改变世界

C# 操作XML

2015-07-31 10:55  Evan.Pei  阅读(129)  评论(0编辑  收藏  举报

XML存储数据的一种文本格式,以节点的方式存储,类似html,只是节点名称可以自己定义。

1.创建XML

public void fun_createXML() {
            XmlNode xmlnode;
            XmlElement xmlelem;
            XmlDocument xmldoc = new XmlDocument();
            //创建根节点
            XmlDeclaration xmldecl = xmldoc.CreateXmlDeclaration("1.0", "gb2312", null);
            xmldoc.AppendChild(xmldecl);
            //创建员工节点容器
            xmlelem = xmldoc.CreateElement("", "Employees", "");
            xmldoc.AppendChild(xmlelem);
            //放三个员工到容器里面
            for (int i = 0; i < 3; i++)
            {
                //xmldoc.SelectSingleNode()查找某个节点
                xmlnode = xmldoc.SelectSingleNode("Employees");
                //创建节点
                XmlElement xe = xmldoc.CreateElement("node");
                xe.SetAttribute("name", "evan");//设置属性
                xe.SetAttribute("age", "27");
                //创建节点
                XmlElement kemu1 = xmldoc.CreateElement("title");
                kemu1.SetAttribute("id", "title");//设置属性
                kemu1.InnerText = "javascript";//设置文本
                xe.AppendChild(kemu1);//填充到xe节点中

                XmlElement score = xmldoc.CreateElement("score");
                score.InnerText = "86.5";
                xe.AppendChild(score);

                xmlnode.AppendChild(xe);
            }
            //在项目根目录创建XML文件
            xmldoc.Save(Server.MapPath("data3.xml"));
        }

2.读取XML

 public void fun_GetXML() {
            //System.IO.StreamReader myfile = 
            //    new System.IO.StreamReader(Server.MapPath("data3.xml"),System.Text.Encoding.Default);
            //string mystring = myfile.ReadToEnd();//以文本的方式获取全部文本
            //myfile.Close();
            XmlDocument xd = new XmlDocument();
            xd.Load(Server.MapPath("data3.xml"));
            //获取所有子节点
            XmlNodeList xnlist = xd.SelectSingleNode("Employees").ChildNodes;
            for (int i = 0; i < xnlist.Count; i++) {
                XmlElement xe = (XmlElement)xnlist[i];
                Response.Write("名字是:"+xe.GetAttribute("name")+"</br>");//获取属性名称
                //获取子节点
                XmlNodeList xn2=xe.ChildNodes;
                for (int y = 0; y < xn2.Count; y++)
                {
                    XmlElement xe2 = (XmlElement)xn2[y];
                    if (xe2.Name == "title")//节点名称
                    {
                        Response.Write("科目是:" + xe2.InnerText + "</br>");
                    }
                    else {
                        Response.Write("分数数:" + xe2.InnerText + "</br>");
                    }
                }
            }
        }

3.修改XML

public void fun_updateXMLText()
        {
            XmlDocument xd = new XmlDocument();
            xd.Load(Server.MapPath("data3.xml"));
            //获取所有子节点
            XmlNodeList nodelist = xd.SelectSingleNode("Employees").ChildNodes;
            //循环子节点
            foreach (XmlNode x in nodelist)
            {
                //转换
                XmlElement xe = (XmlElement)x;
                if (xe.Name == "NEWnode")
                {//判断节点名称
                    xe.InnerText = "bbbbbbbbbb";//修改里面的文本
                }
            }
            xd.Save(Server.MapPath("data3.xml"));//重新保存

        }

4.添加XML

public void fun_addNodeXML() {
            XmlDocument xd = new XmlDocument();
            xd.Load(Server.MapPath("data3.xml"));
            XmlNode xn = xd.SelectSingleNode("Employees");

            XmlElement xe = xd.CreateElement("NEWnode");
            xe.InnerText = "NEWnodeTEXT";
            xn.AppendChild(xe);

            xd.Save(Server.MapPath("data3.xml"));

        }

 5.删除XML节点

XmlDocument xmlDoc=new XmlDocument(); 
xmlDoc.Load( Server.MapPath("data.xml") ); 
XmlNodeList xnl=xmlDoc.SelectSingleNode("Employees").ChildNodes; 
foreach(XmlNode xn in xnl) 
{ 
    XmlElement xe=(XmlElement)xn; 
    xe.RemoveAttribute("genre");//删除genre属性 

    XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点 
    foreach(XmlNode xn1 in nls)//遍历 
    { 
        XmlElement xe2=(XmlElement)xn1;//转换类型 
        if(xe2.Name=="flag")//如果找到 
        { 
            xe.RemoveChild(xe2);//则删除
        } 
    } 
} 
xmlDoc.Save( Server.MapPath("data.xml") );