C# XML文件的一些操作(XmlDocument、XmlElement、XmlNode)
来源:互联网 发布:网络信息安全专业 编辑:程序博客网 时间:2024/04/27 23:45
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"); }
- C# XML文件的一些操作(XmlDocument、XmlElement、XmlNode)
- C# XML文件的一些操作(XmlDocument、XmlElement、XmlNode)
- XmlDocument,XmlNode,XmlElement创建复杂XML文档
- C#操作XML文档(XmlDocument、XmlNode、XmlAttribute、SelectSingleNode、SelectNodes、XmlNodeList)
- C#操作XML文档(XmlDocument、XmlNode、XmlAttribute、SelectSingleNode、SelectNodes、XmlNodeList)
- C#操作XML文档(XmlDocument、XmlNode、XmlAttribute、SelectSingleNode、SelectNodes、XmlNodeList)
- C#操作XML文档(XmlDocument、XmlNode、XmlAttribute、SelectSingleNode、SelectNodes、XmlNodeList)
- 【xml】XmlNode vs XmlElement
- C#中XmlNode与XmlElement的区别
- C++xml文件操作 CMarkup学习方法说明 最近正在研究C++下的XML分析工具CMarkup。初次和XML相遇是基于C#对XML的操作。C#的XmlDocument和XmlNode给我印象
- XmlNode 和 XmlElement 的区别
- XmlNode和XmlElement的区别
- XmlElement与XmlNode的区别
- xmlNode 和 xmlElement 的区别
- XmlNode与XmlElement的区别
- C# XML文件格式化、xml文件读写(通过自定义类xmlNode实现对xml的操作)
- XmlNode与XmlElement的区别总结
- XmlNode与XmlElement的区别总结
- 为何伟大的创新会失败?一切皆与生态系统有关
- get和post的区别并讲解到URLENCODE和乱码问题
- 电力发展与环境保护
- androdi 解决加载大图片常用方法
- jsp小知识01----<c:forEach>
- C# XML文件的一些操作(XmlDocument、XmlElement、XmlNode)
- 滑雪
- ORA-01628:max # of extents num reached for rollback segment num !
- 程序员都应该知道的福利
- tomcat启动报错:Error parsing XPath '/sqlMap/insert'. Cause: java.util.NoSuchElementEx
- 基于MTD的NAND驱动开发(二)
- 面试技巧(1)面试问答技巧总结
- 【煤气罐】冒火爆燃-处理方法
- ArcGIS for Android示例解析之离线地图-----LocalTiledLayer