对XML的使用

一、

1.先创建一个System.xml的文件

<?xml version="1.0" encoding="utf-8" ?>
<systems>
  <system>
    <name>测试A</name>
    <code>testA</code>
    <datasource>Data Source=.;Initial Catalog=【数据库A】; User ID=sa;Password=sa;</datasource>
    <path>http://www.baidu.com/</path>
    <database>数据库A</database>
  </system>
  <system>
     <name>测试B</name>
     <code>testB</code>
     <datasource>Data Source=.;Initial Catalog=【数据库B】; User ID=sa;Password=sa;</datasource>
     <path>http://www.baidu.com/</path>
     <database>数据库B</database>
   </system>
</systems>

 2.DataSet 类 已经实现了XML读写序列化的方法

/// <summary>
/// 子系统信息
/// </summary>
public class ChildSystem
{
    public ChildSystem()
    {
        //
        // TODO: 在此处添加构造函数逻辑
        //
    }
    public string Code { get; set; }

    public string DataSource { get; set; }

    public string Name { get; set; }

    public string Path { get; set; }

    public string DataBase { get; set; }
}

/// <summary>
/// 子系统集合
/// </summary>
public class ChildSystemCollection {

    public static List<ChildSystem> Systems {
        get { return GetList(); }
    }
    private static List<ChildSystem> GetList() {
        List<ChildSystem> list = new List<ChildSystem>();

        System.Data.DataSet ds = new System.Data.DataSet();
        ds.ReadXml(System.Web.HttpContext.Current.Server.MapPath("~/Test/System.xml"));
        foreach (DataRow dr in ds.Tables[0].Rows) {
            list.Add(new ChildSystem() {
                Name = dr["Name"].ToString(),
                Code = dr["Code"].ToString(),
                DataSource = dr["DataSource"].ToString(),
                Path = dr["Path"].ToString(),
                DataBase = dr["DataBase"].ToString()
            });
        }
        return list;
    }
}

二、C#读写XML

1.创建一个chenze.xml文件

<?xml version="1.0" encoding="utf-8"?>
<cPage></cPage>

2.读取xml,插入节点

    static void Main(string[] args)
    {
        string xmlUrl = "../../chenze.xml";
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(xmlUrl);
        XmlNode root = xmlDoc.SelectSingleNode("cPage");//查找

        XmlElement xe1 = xmlDoc.CreateElement("book");//创建一个节点
        xe1.SetAttribute("genre", "chenze");//设置该节点genre属性
        xe1.SetAttribute("ISBN", "2-3631-4");//设置该节点ISBN属性

        XmlElement xesub1 = xmlDoc.CreateElement("title");
        xesub1.InnerText = "CS从入门到精通";//设置文本节点
        xe1.AppendChild(xesub1);//添加到节点中

        XmlElement xesub2 = xmlDoc.CreateElement("author");
        xesub2.InnerText = "张三";
        xe1.AppendChild(xesub2);

        XmlElement xesub3 = xmlDoc.CreateElement("price");
        xesub3.InnerText = "58.3";
        xe1.AppendChild(xesub3);

        root.AppendChild(xe1);//添加到节点中

        xmlDoc.Save(xmlUrl);
    }

结果:

3.修改节点

    static void Main(string[] args)
    {
        string xmlUrl = "../../chenze.xml";
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(xmlUrl);
        /*将genre属性值为“chenze“的节点的genre值改为“updateCHENZE”,将该节点的子节点的文本修改为“亚胜”。*/
        XmlNodeList nodeList = xmlDoc.SelectSingleNode("cPage").ChildNodes;//获取bookstore节点的所有子节点
        foreach (XmlNode xn in nodeList)//遍历所有子节点
        {
            XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
            if (xe.GetAttribute("genre") == "chenze")//如果genre属性值为“李赞红”
            {
                xe.SetAttribute("genre", "updateCHENZE");//则修改该属性为“updateCHENZE”
                XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点
                foreach (XmlNode xn1 in nls)//遍历
                {
                    XmlElement xe2 = (XmlElement)xn1;//转换类型
                    if (xe2.Name == "author")//如果找到
                    {
                        xe2.InnerText = "亚胜";//则修改
                        break;//找到退出来就可以了
                    }
                }
                break;
            }
        }
        xmlDoc.Save(xmlUrl);//保存。
    }

结果:

4.删除 节点的genre属性,删除 节点

        static void Main(string[] args)
        {
            string xmlUrl = "../../chenze.xml";
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlUrl);
            /*删除 节点的genre属性,删除 节点*/
            XmlNodeList xnl = xmlDoc.SelectSingleNode("cPage").ChildNodes;
            foreach (XmlNode xn in xnl)
            {
                XmlElement xe = (XmlElement)xn;
                if (xe.GetAttribute("genre") == "updateCHENZE")
                {
                    xe.RemoveAttribute("genre");//删除genre属性
                }
                //else if (xe.GetAttribute("genre") == "updateCHENZE")
                //{
                //    xe.RemoveAll();//删除该节点的全部内容
                //}
            }
            xmlDoc.Save(xmlUrl);
        }

结果:

    static void Main(string[] args)
    {
        string xmlUrl = "../../chenze.xml";
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(xmlUrl);
        /*删除 节点的genre属性,删除 节点*/
        XmlNodeList xnl = xmlDoc.SelectSingleNode("cPage").ChildNodes;
        foreach (XmlNode xn in xnl)
        {
            XmlElement xe = (XmlElement)xn;
            if (xe.GetAttribute("genre") == "updateCHENZE11")
            {
                xe.RemoveAttribute("genre");//删除genre属性
            }
            else if (xe.GetAttribute("genre") == "updateCHENZE")
            {
                xe.RemoveAll();//删除该节点的全部内容
            }
        }
        xmlDoc.Save(xmlUrl);
    }

结果:

5.显示所有数据

static void Main(string[] args)
{
    string xmlUrl = "../../chenze.xml";
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(xmlUrl);
    XmlNode root = xmlDoc.SelectSingleNode("cPage");//查找

    XmlNodeList xnl = root.ChildNodes;
    foreach (XmlNode xnf in xnl)
    {
        XmlElement xe = (XmlElement)xnf;
        Console.WriteLine(xe.GetAttribute("genre"));//显示属性值
        Console.WriteLine(xe.GetAttribute("ISBN"));
        XmlNodeList xnf1 = xe.ChildNodes;
        foreach (XmlNode xn2 in xnf1)
        {
            Console.WriteLine(xn2.InnerText);//显示子节点点文本
        }
    }
    Console.ReadLine();
}

结果:

三、待补充...

作者:chenze
出处:https://www.cnblogs.com/chenze-Index/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果文中有什么错误,欢迎指出。以免更多的人被误导。
原文地址:https://www.cnblogs.com/chenze-Index/p/13885610.html