C#基础进阶一 高级语法之索引器、单例模式、XML

本文详细介绍了单例模式的实现步骤以及如何使用XML进行数据存储,包括XML的特点、创建与读取XML文档的方法,以及如何进行XML的追加与删除操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、索引器


二、单例模式:只能创建一个对象的类

语法实现步骤:

1、将构造函数私有化,private;

private Form2()
        {
            InitializeComponent();
        }

2、类内部创建一个静态该类对象的单例,初值为null;

public static Form2 frmSingle = null;

3、创建一个静态方法,判断单例是否为null,如是,新建一个对象并赋值给单例,返回该单例

public static Form2 GetSingle()
        {
            if (frmSingle == null)
            {
                frmSingle = new Form2();
            }
            return frmSingle;
        }

最后调用此类的静态方法即可取得此单例

orm2 frm2 = Form2.GetSingle();   //new Form2();
            frm2.Show();

 

三、XML :Extensible Markup Language  可扩展标记语言

HTML(超级文本标记语言)是用来显示数据的,而XML(可扩展标记语言)是用来存储数据的,小型数据库

特点:标签不固定,可以自由发挥;

与HTML一样标签也是成对出现,但是严格区分大小写,必须有一个并且只能有一个根节点

1、通过新建XML文件,手写进去:

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

<Books>
  
  <Book>
    <Name>冰与火之歌</Name>
    <Price>10</Price>
    <Des>权利的游戏</Des>
  </Book>

  <Book>
    <Name>三国演义</Name>
    <Price>50</Price>
    <Des>三国鼎立</Des>
  </Book>
  
</Books>

 

2、通过代码创建XML文档

1)引入命名空间:---using System.Xml;

2)创建XML文档对象

XmlDocument doc = new XmlDocument();

3)添加第一行描述信息

XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
            doc.AppendChild(dec);


4)添加根节点

XmlElement books =  doc.CreateElement("Books");
            doc.AppendChild(books);


5)给根节点添加子节点

XmlElement book1 = doc.CreateElement("Book");
            books.AppendChild(book1);
            XmlElement book2 = doc.CreateElement("Book");
            books.AppendChild(book2);

6)给子节点添加信息节点

XmlElement name1 =  doc.CreateElement("Name");
            name1.InnerText = "冰与火之歌";
            book1.AppendChild(name1);
            XmlElement price1 = doc.CreateElement("Price");
            price1.InnerText = "10";
            book1.AppendChild(price1);
            XmlElement des1 = doc.CreateElement("Des");
            des1.InnerText = "权利的游戏";
            book1.AppendChild(des1);

            XmlElement name2 = doc.CreateElement("Name");
            name2.InnerText = "三国演义";
            book2.AppendChild(name2);
            XmlElement price2 = doc.CreateElement("Price");
            price2.InnerText = "50";
            book2.AppendChild(price2);
            XmlElement des2 = doc.CreateElement("Des");
            des2.InnerText = "三国鼎立";
            book2.AppendChild(des2);

7)保存XML文档

doc.Save("Books.xml");

 

8)带属性的XML

XmlElement orderItem1 = doc.CreateElement("OrderItem"); //子节点1
            //给节点添加属性
            orderItem1.SetAttribute("Name", "码表");
            orderItem1.SetAttribute("Count", "40");
            item.AppendChild(orderItem1);

9)添加内容时有两种,当需要添加标签时用

name.InnerXml = "<p>我是一个p标签</p>"; 

当只是存文本内容时,最好用 Text

number.InnerText = "我是一个p标签";

 

3、追加XML

也是要先引入命名空间,创建XML文档对象,然后开始判断是否存在要追加的文件

if(File.Exists("Books.xml"))

声明一个根节点:XmlElement books;

1)如果存在:

加载文档,并获取XML文档的根节点

//如存在,加载该文档
                doc.Load("Books.xml");
                //获取文档的根节点
                books = doc.DocumentElement;

然后在根节点中追加子节点

2)如不存在,添加第一行描述信息,添加根节点,与创建XML文档相同

XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
                doc.AppendChild(dec);
                books = doc.CreateElement("Books");
                doc.AppendChild(books);

3)判断完成后,将要追加的内容追加到根节点中

同创建XML中的添加子节点

 

4、读取XML

1)也是要创建一个XML对象,加载要读取的XML,然后获取根节点

XmlDocument doc = new XmlDocument();
            //加载要读取的xml文档
            doc.Load("Books.xml");
            //获取XML的根节点
            XmlElement books = doc.DocumentElement;

2)然后根据根节点获取所有子节点,返回一个节点列表集合

XmlNodeList xnl = books.ChildNodes;


3)遍历集合就能得到每一项节点的值

foreach (XmlNode item in xnl)
            {
                Console.WriteLine(item.InnerText);
            }

 

5、读取带属性的XML

1)同以上加载XML

2)获得某一节点下的所有子节点列表结合

XmlNodeList xnl = doc.SelectNodes("/Order/Items/OrderItem"); //获得某一个节点下所包含的所有子节点

3)遍历集合,得到每一个子节点中的属性

foreach (XmlNode node in xnl)
            {
                Console.WriteLine(node.Attributes["Name"].Value);
                Console.WriteLine(node.Attributes["Count"].Value);
            }

4) 可以改变属性的值:

//获取该节点
            XmlNode xn = doc.SelectSingleNode("/Order/Items/OrderItem[@Name='码农']");
            xn.Attributes["Name"].Value = "改变后的Name"; //改变该节点Name属性的值
            xn.Attributes["Count"].Value = "100";   //改变该节点Count属性的值
            doc.Save("Order.xml");  //重新保存XML文档

 

6、删除XML中的节点

1、同上加载要删除的XML

2、获得要删除的节点的父节点

XmlNode xn = doc.SelectSingleNode("/Order/Items"); //获取要删除的节点的父节点


3、删除此节点下的所有节点:

xn.RemoveAll();

然后重新保存即可

 







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值