基于DOM的XML文档读写

2012年3月22日    天气 下雨   何来晴日,都下了快两个月雨了,春雨绵绵,也不用这样吧!


//基于DOM的XML文档读写

using System;

using System.Collections.Generic;
using System.Text;
using System.Xml;

namespace xml读写
{
    class Program
    {
        static void Main(string[] args)
        {
            //基于DOM读写XML
            //创建一个xml文档
            XmlDocument xdoc = new XmlDocument();
            //装载你想要用的文档
            xdoc.Load("students.xml");
            //遍历xml的所有节点
            XmlElement xe = xdoc.DocumentElement;
            bianliList(xe);
            //创建一个节点
            createNode(xdoc);
            //更新节点
            updateNode(xe);
            Console.WriteLine("------------------------------------------------");
            deleteNode(xe);
            bianliList(xe);
            
            //保存修改的值
            xdoc.Save("students.xml");//每次修改的值,都是在内存上的,需要保存到硬盘

            Console.ReadKey();
        }
        //遍历所有节点
        static void bianliList(XmlNode xe)
        {
            //判断是否含有子节点
            if (xe.HasChildNodes)
            {
                //遍历所有子节点
                for (int i = 0; i < xe.ChildNodes.Count; i++)
                {
                    XmlNode xe1 = xe.ChildNodes[i];
                    bianliList(xe1);//递归调用遍历所有节点
                }
               
            }
            else
            {
                Console.WriteLine(xe.Value);//输出节点的值
            }
            
        }
        //删除节点(删除名字为花七的address节点)
        static void deleteNode(XmlElement xe)
        {
            XmlNode xx;
            for (int i = 0; i < xe.ChildNodes.Count; i++)
            {
                foreach (XmlNode xn in xe.ChildNodes[i].ChildNodes)
                {
                    if (xn.Name == "name")
                    {
                        if (xn.InnerText == "花七")//找到目标
                        {
                            xx = xn.ParentNode;//得到他的父节点
                            for (int j = 0; j < xx.ChildNodes.Count; j++)
                            {
                                if (xx.ChildNodes[j].Name == "address")
                                {
                                    xx.RemoveChild(xx.ChildNodes[j]);//删除该节点
                                    return;
                                }
                            }
                        }
                    }
                }
            }

        }
        //更新文档节点
        static void updateNode(XmlElement xe)
        {
            for (int i = 0; i < xe.ChildNodes.Count; i++)
            {
                foreach (XmlNode xn in xe.ChildNodes[i].ChildNodes)
                {
                    if (xn.Name == "sex")
                    {
                        if (xn.InnerText == "男")
                        {
                            xn.InnerText = "女";//修改他的值
                        }
                        else
                            xn.InnerText = "男";
                    }
                }
            }
        }
        //给文档创建节点
        static void createNode(XmlDocument xdoc)
        {
            XmlElement xe1 = xdoc.CreateElement("student");//创建元素节点
            XmlElement xea1 = xdoc.CreateElement("name");
            XmlElement xea2 = xdoc.CreateElement("id");
            XmlElement xea3 = xdoc.CreateElement("sex");
            XmlElement xea4 = xdoc.CreateElement("address");

            XmlText xet1 = xdoc.CreateTextNode("小三");//创建文本节点
            XmlText xet2 = xdoc.CreateTextNode("0100");
            XmlText xet3 = xdoc.CreateTextNode("女");
            XmlText xet4 = xdoc.CreateTextNode("湖南长沙");

            xea1.AppendChild(xet1);
            xea2.AppendChild(xet2);
            xea3.AppendChild(xet3);
            xea4.AppendChild(xet4);

            xe1.AppendChild(xea1);
            xe1.AppendChild(xea2);
            xe1.AppendChild(xea3);
            xe1.AppendChild(xea4);
           
            XmlElement xe = xdoc.DocumentElement;
            xe.AppendChild(xe1);//赋加到树上
        }
    }
}


posted @ 2012-03-22 20:10  话里  阅读(144)  评论(0)    收藏  举报