C#操作XML文档(XmlDocument、XmlNode、XmlAttribute、Se。。。

更新时间:2023-08-03 13:02:32 阅读: 评论:0

C#操作XML⽂档(XmlDocument、XmlNode、XmlAttribute、
Se。。。
C#操作xml主要有这么⼏个对象:XmlDocument、XmlElement、XmlNode
命名空间:
using System.Xml;
知识补充:
XmlNode和XmlElement的区别:
1、Element是⼀个⼩范围的定义,必须含有完整信息的节点才能叫做元素。
2、Node是基本对象,Attribute、Element、Text等都是Node的⼦对象。
咨询费⼀个元素⼀定是⼀个节点,⽽⼀个节点不⼀定是元素。
XmlElement与XmlNode之间的继承关系如下:
System..::.Object
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  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 内容如下所⽰:
其中:
“ur”是xml ⽂件的根节点;
两个"person"节点是"ur"节点的⼦节点;
"person"节点有三个属性:"name", "x", "age";
"pass"和"address"是"person"节点的两个⼦节点
(1) 增加声明段落:
(2) 加⼊根元素
(3) 装载XML ⽂件
(4) 增加新元素[csharp]
01. XmlDocument xmldoc = new  XmlDocument();  02. //加⼊XML 的声明段落,<?xmlversion="1.0" encoding="gb2312"?>  03. XmlDeclaration xmldecl;  04. xmldecl = xmldoc.CreateXmlDeclaration("1.0","gb2312", null );  05. xmldoc.AppendChild(xmldecl);  [csharp]
原清
01. private  void  CreateRootElement()  02. {  03.    xmlDoc = new  XmlDocument();  04.    XmlElement xmlelem = xmlDoc.CreateElement("ur");  05.    xmlDoc.AppendChild(xmlelem);  06.  07.    //保存创建好的XML ⽂档  08.    xmlDoc.Save("Ur.xml");  09. }  [csharp]
烘糕
01. //load xml file  02. private  void  LoadXml()  03. {  04.    if  (isFileExisted == fal )  05.    {  06.        xmlDoc = new  XmlDocument();  07.        CreateRootElement();  08.        isFileExisted = true ;  09.        return ;  10.    }  11.    xmlDoc=new  XmlDocument();  12.    xmlDoc.Load("Ur.xml");  13. }
(5) 输出xml ⽂档内容:
(⽤了两种遍历⽅式:XmlNode ,XmlElement )
(6) 查找并修改节点31. [csharp]
01. //输出xml ⽂档  02. public  void  showXml()  03. {  04.    LoadXml();  05.    //获取根节点  06.    XmlElement rootElement = xmlDoc.DocumentElement;  07.      08.    //挨个查找其下的⼦节点  09.    foreach  (XmlElement childElement in  rootElement)  10.    {  11.        //分别输出⼦节点属性  12.        Console.WriteLine(childElement.GetAttribute("name"));  13.        Console.WriteLine(childElement.GetAttribute("x"));  14.        Console.WriteLine(childElement.GetAttribute("age"));  15.  16.        //获取孙节点列表  17.        XmlNodeList grandsonNodes = childElement.ChildNodes;  18.        foreach  (XmlNode grandsonNode in  grandsonNodes)  19.        {  20.            //显⽰孙节点⽂本  21.            Console.WriteLine(grandsonNode.InnerText);  22.        }  23.    }  24. }
(7) 查找并删除节点
XML ⽂档是⼀种通⽤的⽂档,这种⽂档既可以⽤.config 作为后缀也可以⽤.xml 作为后缀。XML ⽂档主要由元素节点和节点的属性共同构成
的。它有且仅有⼀个根节点,其他的节点全部都是根节点的⼦节点或者⼦⼦节点;每⼀个节点有开始就⼀定会有结束,不可能出现有开始⽆结束的节点,节点主要有两种类型:有InnerText 的<city>……</city>和没有InnerText 的<city……/>。在节点中含有属性,⼀个节点可以含有多个属性,每个属性是由名字和值共同构成的。
在XML ⽂档中,节点、属性都是区分⼤⼩写的。对于某个节点的属性,Name 是不能重复的,即使在定义属性的时候,定义了两个name 完全相同的属性,添加到同⼀个节点上⾯,后⾯的属性会把前⾯的属性覆盖,不会报语法错误;对于某个节点下⾯的⼦节点,则可以添加多个完全相同的⼦节点。01.  //修改节点  02. public  void  UpdateElement(string  name)  03. {  04.    LoadXml();  05.    //获取根节点的所有⼦节点  06.    XmlNodeList nodeList=xmlDoc.SelectSingleNode("ur").ChildNodes;  07.      08.    foreach (XmlNode childNode in  nodeList)  09.    {  10.        XmlElement childElement = (XmlElement)childNode;  11.  12.        //如果找到姓名为name 的节点  13.        if  (childElement.GetAttribute("name") == name)  14.        {  15.            childElement.SetAttribute("name","BYH");  16.              17.            //如果下⾯有⼦节点在下⾛  18.            XmlNodeList grandsonNodes = childElement.ChildNodes;  19.            //继续获取xe ⼦节点的所有⼦节点  20.            foreach  (XmlNode grandsonNode in  grandsonNodes)  21.            {  22.                XmlElement grandsonElement = (XmlElement)grandsonNode;  23.                //如果找到节点名为pas
s 的孙⼦节点  24.                if  (grandsonElement.Name == "pass")  25.                {  26.                    grandsonElement.InnerText = "66666";  27.                    break ;  28.                }  29.            }  30.            break ;  31.        }  32.    }  33.    xmlDoc.Save("ur.xml");  34. }
[csharp]
自制奶酪01. public  void  deleteNode(string  name)  02. {  03.    LoadXml();  04.    //获取根节点的所有⼦节点  05.    XmlNodeList childNodes=xmlDoc.SelectSingleNode("ur").ChildNodes;  06.  07.    foreach  (XmlNode childNode in  childNodes)  08.    {  09.        XmlElement childElement = (XmlElement)childNode;  10.        if  (childElement.GetAttribute("name") == name)  11.        {  12.            //删除name 属性  13.            childElement.RemoveAttribute("name");  14.            //删除该节点的全部内容  15.            childElement.RemoveAll();  16.              17.            break ;  18.        }  19.    }  20.  21.    xmlDoc.Save("ur.xml");  22. }
23.
对XML⽂档的操作的前提是:XML⽂档已经存在,并且根节点已经存在。
1、添加节点和属性
1、定义⼀个XML的操作对象:
XmlDocument doc = new XmlDocument();
2、加载⼀个XML⽂件:
doc.Load(@"D:\fig");
指定的⽂件⼀定要存在,否则会报错的。
3、获取根节点:
XmlNode root = doc.DocumentElement;
4、定义⼀个属性:
XmlAttribute ra = doc.CreateAttribute("Name");
5、给属性的值赋值:
ra.Value = "zwj2";
6、将属性添加到节点上⾯:
root.Attributes.Append(ra);
7、再定义⼀个节点为根节点的⼦节点:
XmlNode root1 = doc.CreateElement("table");
夜里8、给节点赋⽂本值:
root1.InnerText = "sdf1";
9、给节点定义并添加属性
10、将该节点添加到⽗节点上去:
庭审记录root.AppendChild(root1);
11、保存XML⽂档:
doc.Save(@"D:\fig");
注意:可以对⼀个节点添加多个属性,那么各个属性会依次往后排;可以给根节点添加多个⼦节点,也可以对⼦节点再添加多个⼦节点。
2、查询和修改节点和属性
1、元素结点有Name属性,就是<>⾥⾯的串,也有InnerText属性(相当于⽂本结点),就是<></>之间的串:root.Name、root.InnerText。这些属性都是可以读写的。------------------------------XmlNode
2、属性结点有Name,也有Value:providerName="System.Data.SqlClient",前⾯为Name,后⾯为Value这些属性既可读也可写。-----------------------------------------------------------XmlAttribute
3、每⼀个结点有⼦结点的集合,也有属性的集合:root.ChildNodes、root.Attributes;集合都有count属性。
4、集合都满⾜索引:
对于属性集合,属性的name是不能重复的,所以索引可以是name字符串索引,那么name字符串要存在,否则返回的是⼀个null属性对象,不会报错;也可以是整数索引,那么此时的整数不能越界,否则是会报错的;:root.Attributes["name"]、root.Attributes[0],返
回XmlAttribute。
对于⼦节点的集合,因为⼦节点可以完全相同,那么⼦节点的name肯定也可以相同,所以此时的索引只能是整数的,⽽不能是⼦节点name 字符串,整数索引也不能越界,否则会报错: root.ChildNodes[10],返回XmlNode。

本文发布于:2023-08-03 13:02:32,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1127677.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:节点   属性   元素   添加   指定   名称
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图