using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Collections;

namespace CommandXML
{
    public class cmdXML
    {

/// <summary>
        /// 创建XML文件
        /// </summary>
        /// <param name="xmlFilePath">存放目录</param>
        /// <param name="rootNodename">根节点名字</param>
        public void CreateXMLDoc(string xmlFilePath, string rootNodename)
         {
             //初始化一个xml实例
             XmlDocument myXmlDoc = new XmlDocument();
             //<?xml version="1.0" encoding="UTF-8"?>
             myXmlDoc.AppendChild(myXmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null));
             //创建xml的根节点
             XmlElement rootElement = myXmlDoc.CreateElement(rootNodename);
             //将根节点加入到xml文件中(AppendChild)
             myXmlDoc.AppendChild(rootElement);
             myXmlDoc.Save(xmlFilePath);
         }

/// <summary>
        /// 增加第一层的节点
        /// </summary>
        /// <param name="xmlFilePath">文件路径</param>
        /// <param name="RootPath">根节点名字</param>
        /// <param name="Name">所要添加第一层节点的节点名</param>
        /// <param name="attribute"></param>
        public void AddXmlFirstNode(string xmlFilePath, string RootPath, string Name, string[,] attribute)
         {
             try
             {
                 XmlDocument myXmlDoc = new XmlDocument();
                 myXmlDoc.Load(xmlFilePath);

XmlNode memberlist = myXmlDoc.SelectSingleNode(RootPath);
                 //XmlNodeList nodelist = memberlist.ChildNodes;

XmlElement firstLevelElement1 = myXmlDoc.CreateElement(Name);
                 //填充第一层的第一个子节点的属性值(SetAttribute)
                 for (int i = 0; i < attribute.GetLength(0); i++)
                 {
                     firstLevelElement1.SetAttribute(attribute[i, 0], attribute[i, 1]);
                 }
                 //将第一层的第一个子节点加入到根节点下
                 memberlist.AppendChild(firstLevelElement1);

//保存更改
                 myXmlDoc.Save(xmlFilePath);
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }
         }

/// <summary>
         /// 增加第二层节点
         /// </summary>
         /// <param name="xmlFilePath">路径</param>
         /// <param name="RootPath">根节点名</param>
         /// <param name="FirstElementattributesName">第一层节点属性名</param>
         /// <param name="Firstattributes">第一层节点属性名对应的值</param>
         /// <param name="SecondElement">所要增加的第二层节点名</param>
         /// <param name="SecondinnerText">第二层节点对应的存储内容</param>
        public void AddXmlSecondNod(string xmlFilePath, string RootPath, string FirstElementattributesName, string Firstattributes, string[] SecondElement, string[] SecondinnerText)
         {
             try
             {
                 XmlDocument myXmlDoc = new XmlDocument();
                 myXmlDoc.Load(xmlFilePath);

XmlNode memberlist = myXmlDoc.SelectSingleNode(RootPath);
                 XmlNodeList nodelist = memberlist.ChildNodes;

//添加一个带有属性的节点信息
                 foreach (XmlNode node in nodelist)
                 {
                     if (node.Attributes[FirstElementattributesName].Value.Equals(Firstattributes))
                     {
                         for (int i = 0; i < SecondElement.Length; i++)
                         {
                             XmlElement newElement = myXmlDoc.CreateElement(SecondElement[i]);
                             newElement.InnerText = SecondinnerText[i];
                             node.AppendChild(newElement);
                         }
                     }
                 }
                 //保存更改
                 myXmlDoc.Save(xmlFilePath);
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }
         }

/// <summary>
        /// 获取第一层节点的属性值,返回所有的属性名和对应的值
        /// </summary>
        /// <param name="xmlFilePath">文件路径</param>
        /// <param name="RootPath">根节点名</param>
        /// <param name="firstNodeName">第一层节点名</param>
        /// <returns></returns>
        public ArrayList GetXMLFirstNodeAttributes(string xmlFilePath, string RootPath, string firstNodeName)
         {
             ArrayList list = new ArrayList();
             try
             {
                 //初始化一个xml实例
                 XmlDocument myXmlDoc = new XmlDocument();
                 //加载xml文件(参数为xml文件的路径)
                 myXmlDoc.Load(xmlFilePath);
                 //获得第一个姓名匹配的节点(SelectSingleNode):此xml文件的根节点
                 XmlNode rootNode = myXmlDoc.SelectSingleNode(RootPath);
                 //分别获得该节点的InnerXml和OuterXml信息
                 string innerXmlInfo = rootNode.InnerXml.ToString();
                 string outerXmlInfo = rootNode.OuterXml.ToString();
                 //获得该节点的子节点(即:该节点的第一层子节点)
                 XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
                 foreach (XmlNode node in firstLevelNodeList)
                 {
                     //获得该节点的属性集合
                     if (node.Name == firstNodeName)
                     {
                         XmlAttributeCollection attributeCol = node.Attributes;
                         foreach (XmlAttribute attri in attributeCol)
                         {
                             //获取属性名称与属性值
                             string name = attri.Name;
                             string value = attri.Value;
                             list.Add(name + ":" + value);
                         }
                     }
                 }
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }
             return list;
         }

/// <summary>
        /// 获取第二层节点的存储值
        /// </summary>
        /// <param name="xmlFilePath">文件路径</param>
        /// <param name="RootPath">根节点</param>
        /// <param name="firstNodeName">第一层节点名</param>
        /// <param name="secondNoadeName">第二层节点名</param>
        /// <returns></returns>
        public ArrayList GetXMLSecondNodeValue(string xmlFilePath, string RootPath, string firstNodeName, string secondNoadeName)
         {
             ArrayList list = new ArrayList();
             try
             {
                 //初始化一个xml实例
                 XmlDocument myXmlDoc = new XmlDocument();
                 //加载xml文件(参数为xml文件的路径)
                 myXmlDoc.Load(xmlFilePath);
                 //获得第一个姓名匹配的节点(SelectSingleNode):此xml文件的根节点
                 XmlNode rootNode = myXmlDoc.SelectSingleNode(RootPath);
                 //分别获得该节点的InnerXml和OuterXml信息
                 string innerXmlInfo = rootNode.InnerXml.ToString();
                 string outerXmlInfo = rootNode.OuterXml.ToString();
                 //获得该节点的子节点(即:该节点的第一层子节点)
                 XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
                 foreach (XmlNode node in firstLevelNodeList)
                 {
                     //获得该节点的属性集合
                     if (node.Name == firstNodeName)
                     {
                         foreach (XmlNode _node in node.ChildNodes)
                         {
                             if (_node.Name == secondNoadeName)
                                 list.Add(_node.InnerText);
                         }
                     }

//判断此节点是否还有子节点
                     if (node.HasChildNodes)
                     {
                         //获取该节点的第一个子节点
                         XmlNode secondLevelNode1 = node.FirstChild;
                         //获取该节点的名字
                         string name = secondLevelNode1.Name;
                         //获取该节点的值(即:InnerText)
                         string innerText = secondLevelNode1.InnerText;
                         Console.WriteLine("{0} = {1}", name, innerText);

//获取该节点的第二个子节点(用数组下标获取)
                         XmlNode secondLevelNode2 = node.ChildNodes[1];
                         name = secondLevelNode2.Name;
                         innerText = secondLevelNode2.InnerText;
                         Console.WriteLine("{0} = {1}", name, innerText);
                     }
                 }
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }
             return list;
         }

/// <summary>
        /// 修改第一层节点的属性值
        /// </summary>
        /// <param name="xmlFilePath">文件路径</param>
        /// <param name="RootPath">根节点名</param>
        /// <param name="FirstNodeName">第一节点名</param>
        /// <param name="FirstNodeAttributes">第一节点属性名</param>
        /// <param name="FirstNodeAttributesOldValue">第一节点属性值</param>
        /// <param name="newValue"></param>
        public void ModifyXmlFirstattribute(string xmlFilePath, string RootPath, string FirstNodeName, string FirstNodeAttributes, string FirstNodeAttributesOldValue, string newValue)
         {
             try
             {
                 XmlDocument myXmlDoc = new XmlDocument();
                 myXmlDoc.Load(xmlFilePath);
                 //XmlNode rootNode = myXmlDoc.FirstChild;
                 //XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
                 XmlNode rootNode = myXmlDoc.SelectSingleNode(RootPath);
                 foreach (XmlNode node in rootNode.ChildNodes)
                 {
                     if (node.Name.Equals(FirstNodeName))
                     {
                         //修改此节点的属性值
                         if (node.Attributes[FirstNodeAttributes].Value.Equals(FirstNodeAttributesOldValue))
                         {
                             node.Attributes[FirstNodeAttributes].Value = newValue;
                         }
                     }
                 }
                 //要想使对xml文件所做的修改生效,必须执行以下Save方法
                 myXmlDoc.Save(xmlFilePath);
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }
         }

/// <summary>
        /// 修改第二节点的存储值
        /// </summary>
        /// <param name="xmlFilePath">文件路径</param>
        /// <param name="RootPath">根节点名字</param>
        /// <param name="FirstNodeName">第一节点名字</param>
        /// <param name="FirstNodeAttributes">第一节点属性名</param>
        /// <param name="FirstNodeAttributesValue">第一节点属性值</param>
        /// <param name="SecondNodeName">第二节点名字</param>
        /// <param name="value">第二节点存储值</param>
        public void ModifyXmlElementValue(string xmlFilePath, string RootPath, string FirstNodeName,string FirstNodeAttributes, string FirstNodeAttributesValue, string SecondNodeName, string value)
         {
             try
             {
                 XmlDocument myXmlDoc = new XmlDocument();
                 myXmlDoc.Load(xmlFilePath);
                 XmlNode rootNode = myXmlDoc.SelectSingleNode(RootPath);
                 foreach (XmlNode node in rootNode.ChildNodes)
                 {
                     if (node.Name.Equals(FirstNodeName))
                     {
                         //修改此节点的属性值
                         if (node.Attributes[FirstNodeAttributes].Value.Equals(FirstNodeAttributesValue))
                         {
                             foreach (XmlNode _node in node.ChildNodes)
                             {
                                 if (_node.Name == SecondNodeName)
                                 {
                                     _node.InnerText = value;
                                 }
                             }
                         }
                     }
                 }
                 //要想使对xml文件所做的修改生效,必须执行以下Save方法
                 myXmlDoc.Save(xmlFilePath);
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }
         }

/// <summary>
        /// 删除第一节点
        /// </summary>
        /// <param name="xmlFilePath">路径</param>
        /// <param name="RootPath">根节点</param>
        /// <param name="FirstNodeName">第一节点名</param>
        /// <param name="FirstNodeAttributes">第一节点属性名</param>
        /// <param name="FirstNodeAttributesValue">第一节点属性值</param>
        public void DeleteXmlFirstnode(string xmlFilePath, string RootPath, string FirstNodeName, string FirstNodeAttributes, string FirstNodeAttributesValue)
         {
             try
             {
                 XmlDocument myXmlDoc = new XmlDocument();
                 myXmlDoc.Load(xmlFilePath);
                 XmlNode rootNode = myXmlDoc.SelectSingleNode(RootPath);

foreach (XmlNode node in rootNode.ChildNodes)
                 {
                     if (node.Name.Equals(FirstNodeName))
                     {
                         if (node.Attributes[FirstNodeAttributes].Value.Equals(FirstNodeAttributesValue))
                         {
                             //node.RemoveAll();
                             rootNode.RemoveChild(node);
                         }
                     }
                 }
                 //保存对xml文件所做的修改
                 myXmlDoc.Save(xmlFilePath);
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }
         }

/// <summary>
         /// 删除子节点
        /// </summary>
        /// <param name="xmlFilePath">路径</param>
        /// <param name="FirstElementattributesName">第一节点属性名</param>
        /// <param name="Firstattributes">第一节点属性值</param>
        /// <param name="secondnodeName">子节点名称</param>
        public void DeleteXmlsecondNode(string xmlFilePath, string RootPath, string FirstNodeName, string FirstNodeAttributes, string FirstNodeAttributesValue, string secondnodeName)
         {
             try
             {
                 XmlDocument myXmlDoc = new XmlDocument();
                 myXmlDoc.Load(xmlFilePath);
                 XmlNode rootNode = myXmlDoc.SelectSingleNode(RootPath);

foreach (XmlNode node in rootNode.ChildNodes)
                 {
                     if (node.Name.Equals(FirstNodeName))
                     {
                         if (node.Attributes[FirstNodeAttributes].Value.Equals(FirstNodeAttributesValue))
                         {
                             foreach (XmlNode _node in node.ChildNodes)
                             {
                                 if (_node.Name == secondnodeName)
                                     //_node.RemoveAll();
                                     node.RemoveChild(_node);

}
                         }
                     }
                 }
                 //保存对xml文件所做的修改
                 myXmlDoc.Save(xmlFilePath);
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }
         }

}
}

C#创建、读写、增加、删除XML操作的更多相关文章

  1. 【OF框架】使用OF.WinService项目,添加定时服务,进行创建启动停止删除服务操作

    准备 使用框架搭建完成项目,包含OF.WinService项目. 了解Window Service 和定时服务相关知识. 一.添加一个定时服务 第一步:了解项目结构 第二步:创建一个新的Job 第三步 ...

  2. C语言链表总结(创建,排序,增加,删除)

    #include <stdio.h>#include <stdlib.h> typedef struct NODE{ int data ; struct NODE * pNex ...

  3. 【转】python XML 操作总结(创建、保存和删除,支持utf-8和gb2312)

    原文地址:http://hi.baidu.com/tbjmnvbagkfgike/item/6743ab10af43bb24f6625cc5 最近写程序需要用到xml操作,看了看python.org上 ...

  4. 二叉排序树(BST)创建,删除,查找操作

    binary search tree,中文翻译为二叉搜索树.二叉查找树或者二叉排序树.简称为BST 一:二叉搜索树的定义 他的定义与树的定义是类似的,也是一个递归的定义: 1.要么是一棵空树 2.如果 ...

  5. .net学习笔记---xml操作及读写

    一.XML文件操作中与.Net中对应的类 微软的.NET框架在System.xml命名空间提供了一系列的类用于Dom的实现. 以下给出XML文档的组成部分对应.NET中的类: XML文档组成部分 对应 ...

  6. 在Javascript操作JSON对象,增加 删除 修改

    在Javascript操作JSON对象,增加删除修改全有的,详情见代码 <script type="text/javascript"> var jsonObj2 = { ...

  7. Arcgis engine 指定图层对要素进行创建、删除等操作

    Arcgis engine 指定图层创建点要素 在指定的图层上创建一个点要素,点要素的位置是通过X,Y坐标指定的,下面是具体的注释 .其中 和IFeatureClassWrite接口有关的代码不要好像 ...

  8. c# xml操作(一)

    c# xml操作(一) 此博文包含图片 (-- ::)转载▼ 标签: 杂谈 分类: c# 同样是增,删,改,查四种操作.现在我们就详细介绍一下增和删两种操作.看下面的一个xml示例: <?xml ...

  9. Linq To Xml操作XML增删改查

    对XML文件的操作在平时项目中经常要运用到,比如用于存放一些配置相关的内容:本文将简单运用Linq TO Xml对XML进行操作,主要讲解对XML的创建.加载.增加.查询.修改以及删除:重点在于类XD ...

随机推荐

  1. 新建项目找不到android studio:appcompat v7:27.+包。

    1.我们在build.gradle(project)中添加maven中的google库: allprojects { repositories { jcenter() maven { url &quo ...

  2. python - 初识面向对象

    1.初识面向对象       面向过程:一切以事务的发展流程为中心           优点:负责的问题流程化,编写相对简单         缺点:可扩展性差,只能解决一个问题,改造也会很困难,牵一发 ...

  3. Webpack学习-Loader

    什么是Loader? 继上两篇文章webpack工作原理介绍(上篇.下篇),我们了解到Loader:模块转换器,也就是将模块的内容按照需求装换成新内容,而且每个Loader的职责都是单一,只会完成一种 ...

  4. 前端页面的适配使用rem换算

    前端页面的适配使用rem换算 https://www.cnblogs.com/liangxuru/p/6970629.html 注:本文转载之处:https://www.cnblogs.com/ann ...

  5. js的closures(闭包)

    JS中的闭包(closure) 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.下面就是我的学习笔记,对于Javascript初学者应该是很有用 ...

  6. android控件基本布局

    <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android=&qu ...

  7. 3ci

  8. 13. Roman to Integer ★

    题目内容: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range fr ...

  9. Python filter() 函数

    Python filter() 函数 描述 filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表. 该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为 ...

  10. 第二章01:Hello world 案例

    java程序开发 = 三部曲 源文件+编译器+字节码文件+解释器=结果 源文件:编写Java源文件(我们也称之为源代码文件),它的扩展名为.java: 编译:然后通过编译器把源文件编译成字节码文件,字 ...