C# XML文件的一些操作,增删改查

 C#操作xml主要有这么几个对象:XmlDocument、XmlElement、XmlNode

命名空间:

using System.Xml;

知识补充:

XmlNode和XmlElement的区别:

1、Element是一个小范围的定义,必须含有完整信息的节点才能叫做元素。

2、Node是基本对象,Attribute、Element、Text等都是Node的子对象。

一个元素一定是一个节点,而一个节点不一定是元素。

XmlElement与XmlNode之间的继承关系如下:

System..::.Object
  System.Xml..::.XmlNode
    System.Xml..::.XmlLinkedNode
      System.Xml..::.XmlElement

体现在属性和方法中:

XmlNode有属性 - ChildNodes(XmlNodeList类型),而XmlElement则没有

XmlElement有方法 - GetAttribute、SetAttribute()等方法,而XmlNode则没有

(注意:两者都有Attribute属性

因此,有些时候需要进行两者间的转换,以实现不同的功能。

主要方法以及属性介绍:

(1)  XmlDocument::CreateElement():创建 XmlElement

有一个参数,两个参数,三个参数三种重载,参数类型均为string

一个参数:CreateElement("元素名称")

两个参数:CreateElement("元素名称","元素的命名空间")

三个参数:CreateElement("元素的前缀","元素的名称","元素的命名空间")

(2) XmlDocument::SelectSingleNode():选择匹配 XPath 表达式的第一个 XmlNode

public XmlNode SelectSingleNode(
	string xpath
)

(3) XmlDocument::Save():将 XML 文档保存到指定的位置

(4) XmlDocument::Load():加载指定的 XML 数据

(5)  XmlDocument::DocumentElement:获取文档的根 XmlElement

(6)  XmlElement::SetAttribute():设置具有指定名称的属性的值

相对的有:GetAttribute():获取具有指定名称的属性的值

(7) XmlNode::AppendChild():将指定的节点添加到该节点的子节点列表的末尾

XmlElement也继承了该方法

(8) XmlNode::GetEnumerator():提供对XmlNode中节点上“for each”样式迭代的支持。

同样,XmlElement也继承了该方法,所以也可用于"for each"迭代

实例代码:

XML文档的几个简单操作:

最终实现的XML内容如下所示:


其中:

“user”是xml文件的根节点;

两个"person"节点是"user"节点的子节点;

"person"节点有三个属性:"name", "sex", "age";

"pass"和"address"是"person"节点的两个子节点

(1) 增加声明段落:

XmlDocument xmldoc = new XmlDocument();  
//加入XML的声明段落,<?xmlversion="1.0" encoding="gb2312"?>  
XmlDeclaration xmldecl;  
xmldecl = xmldoc.CreateXmlDeclaration("1.0","gb2312", null);  
xmldoc.AppendChild(xmldecl); 
(2) 加入根元素
private void CreateRootElement()  
{  
    xmlDoc = new XmlDocument();  
    XmlElement xmlelem = xmlDoc.CreateElement("user");  
    xmlDoc.AppendChild(xmlelem);  
  
    //保存创建好的XML文档  
    xmlDoc.Save("User.xml");  
} 
(3) 装载XML文件

//load xml file   
private void LoadXml()   
{  
    if (isFileExisted == false)  
    {  
        xmlDoc = new XmlDocument();  
        CreateRootElement();  
        isFileExisted = true;  
        return;  
    }  
    xmlDoc=new XmlDocument();  
    xmlDoc.Load("User.xml");  
}
(4) 增加新元素

//添加节点   
public void AddElement(string name, string sex, string age, string pass, string address)   
{  
    //装载Xml文件  
    LoadXml();  
    //获取根节点  
    XmlNode xmldocSelect = xmlDoc.SelectSingleNode("user");  
  
    //创建元素Person  
    XmlElement personElement = xmlDoc.CreateElement("person");  
  
    //person节点的三个属性  
    personElement.SetAttribute("name", name);  
    personElement.SetAttribute("sex", sex);  
    personElement.SetAttribute("age", age);  
  
    //创建一个新的元素  
    XmlElement passElement=xmlDoc.CreateElement("pass");   
    //设置节点的串联值  
    passElement.InnerText = pass;  
    //将新创建的节点pass添加为person节点的子节点  
    personElement.AppendChild(passElement);  
  
    XmlElement addrElement=xmlDoc.CreateElement("Address");  
    addrElement.InnerText = address;  
    personElement.AppendChild(addrElement);  
  
    //添加person节点  
    xmldocSelect.AppendChild(personElement);  
    xmlDoc.Save("user.xml");   
} 
(5) 输出xml文档内容:

(用了两种遍历方式:XmlNode,XmlElement)

//输出xml文档  
public void showXml()  
{  
    LoadXml();  
    //获取根节点  
    XmlElement rootElement = xmlDoc.DocumentElement;  
      
    //挨个查找其下的子节点  
    foreach (XmlElement childElement in rootElement)  
    {  
        //分别输出子节点属性  
        Console.WriteLine(childElement.GetAttribute("name"));  
        Console.WriteLine(childElement.GetAttribute("sex"));  
        Console.WriteLine(childElement.GetAttribute("age"));  
  
        //获取孙节点列表  
        XmlNodeList grandsonNodes = childElement.ChildNodes;  
        foreach (XmlNode grandsonNode in grandsonNodes)  
        {  
            //显示孙节点文本  
            Console.WriteLine(grandsonNode.InnerText);  
        }   
    }  
}  
(6) 查找并修改节点
 //修改节点   
public void UpdateElement(string name)   
{   
    LoadXml();  
    //获取根节点的所有子节点   
    XmlNodeList nodeList=xmlDoc.SelectSingleNode("user").ChildNodes;  
      
    foreach(XmlNode childNode in nodeList)  
    {  
        XmlElement childElement = (XmlElement)childNode;  
  
        //如果找到姓名为name的节点  
        if (childElement.GetAttribute("name") == name)   
        {   
            childElement.SetAttribute("name","BYH");   
              
            //如果下面有子节点在下走   
            XmlNodeList grandsonNodes = childElement.ChildNodes;  
            //继续获取xe子节点的所有子节点   
            foreach (XmlNode grandsonNode in grandsonNodes)  
            {  
                XmlElement grandsonElement = (XmlElement)grandsonNode;  
                //如果找到节点名为pass的孙子节点  
                if (grandsonElement.Name == "pass")  
                {  
                    grandsonElement.InnerText = "66666";  
                    break;   
                }   
            }   
            break;   
        }   
    }   
    xmlDoc.Save("user.xml");  
}   
(7) 查找并删除节点
public void deleteNode(string name)   
{   
    LoadXml();   
    //获取根节点的所有子节点  
    XmlNodeList childNodes=xmlDoc.SelectSingleNode("user").ChildNodes;  
  
    foreach (XmlNode childNode in childNodes)  
    {  
        XmlElement childElement = (XmlElement)childNode;  
        if (childElement.GetAttribute("name") == name)   
        {  
            //删除name属性   
            childElement.RemoveAttribute("name");  
            //删除该节点的全部内容  
            childElement.RemoveAll();  
              
            break;  
        }   
    }  
  
    xmlDoc.Save("user.xml");  
}  























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值