C#创建、读写、增加、删除XML操作
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操作的更多相关文章
- 【OF框架】使用OF.WinService项目,添加定时服务,进行创建启动停止删除服务操作
准备 使用框架搭建完成项目,包含OF.WinService项目. 了解Window Service 和定时服务相关知识. 一.添加一个定时服务 第一步:了解项目结构 第二步:创建一个新的Job 第三步 ...
- C语言链表总结(创建,排序,增加,删除)
#include <stdio.h>#include <stdlib.h> typedef struct NODE{ int data ; struct NODE * pNex ...
- 【转】python XML 操作总结(创建、保存和删除,支持utf-8和gb2312)
原文地址:http://hi.baidu.com/tbjmnvbagkfgike/item/6743ab10af43bb24f6625cc5 最近写程序需要用到xml操作,看了看python.org上 ...
- 二叉排序树(BST)创建,删除,查找操作
binary search tree,中文翻译为二叉搜索树.二叉查找树或者二叉排序树.简称为BST 一:二叉搜索树的定义 他的定义与树的定义是类似的,也是一个递归的定义: 1.要么是一棵空树 2.如果 ...
- .net学习笔记---xml操作及读写
一.XML文件操作中与.Net中对应的类 微软的.NET框架在System.xml命名空间提供了一系列的类用于Dom的实现. 以下给出XML文档的组成部分对应.NET中的类: XML文档组成部分 对应 ...
- 在Javascript操作JSON对象,增加 删除 修改
在Javascript操作JSON对象,增加删除修改全有的,详情见代码 <script type="text/javascript"> var jsonObj2 = { ...
- Arcgis engine 指定图层对要素进行创建、删除等操作
Arcgis engine 指定图层创建点要素 在指定的图层上创建一个点要素,点要素的位置是通过X,Y坐标指定的,下面是具体的注释 .其中 和IFeatureClassWrite接口有关的代码不要好像 ...
- c# xml操作(一)
c# xml操作(一) 此博文包含图片 (-- ::)转载▼ 标签: 杂谈 分类: c# 同样是增,删,改,查四种操作.现在我们就详细介绍一下增和删两种操作.看下面的一个xml示例: <?xml ...
- Linq To Xml操作XML增删改查
对XML文件的操作在平时项目中经常要运用到,比如用于存放一些配置相关的内容:本文将简单运用Linq TO Xml对XML进行操作,主要讲解对XML的创建.加载.增加.查询.修改以及删除:重点在于类XD ...
随机推荐
- sql 2012 用户sa登陆不上
1.通过Windows身份验证进入服务器 2.点击“安全性”--“登录名”--“sa” 3.右击sa,点击“属性” 4.取消“强制实施密码策略(F)”勾选 5.对密码重新输入 6.点击确定,重新用SQ ...
- Cognos无法解密来着内容库的用户名和密码凭证
1. 问题描述 启动Cognos失败,报错代码为QE-DEF-0368. 2. 问题分析 Frame Work和Cognos Server安装在不同的目录和/或不同的机器上. 3. 解决方案 需要把S ...
- Abp 中 模块 加载及类型自动注入 源码学习笔记
注意 互相关联多使用接口注册,所以可以 根据需要替换. 始于 Startup.cs 中的 通过 AddApplication 扩展方法添加 Abp支持 1 services.AddApplicati ...
- windows cmd 查找/关闭端口
1.首先查找端口,会显示出所有的端口,比如说要找到端口为“8888”的PID netstat -ano 2.还可以精确查找 netstat -aon|findstr " 3.关闭对应的端口 ...
- web分页控件AspNetPager的使用
首先要先引用AspNetPager.dll文件 然后在<html>上面添加下面代码: <%@ Register Assembly="AspNetPager" Na ...
- org.apache.commons.dbcp.DelegatingPreparedStatement.isClosed()Z和NewProxyPreparedStatement.isClosed()
原文转:https://blog.csdn.net/qq_37909508/article/details/83028536 报错: NewProxyPreparedStatement.isClose ...
- 浅谈Vector、ArrayList、LinkedList
下图是Collection的类继承图 从图中可以看出:Vector.ArrayList.LinkedList这三者都实现了List 接口.所有使用方式也很相似,主要区别在于实现方式的不同,所以对不同的 ...
- firefox 屏蔽Backspace按键的后退功能
直接上图
- JSON与JS对象的区别
<script> var obj2={};//这只是JS对象 var obj3={width:100,height:200};/*这跟JSON就更不沾边了,只是JS的 对象 */ var ...
- python基础(字典)
#实现同样的功能,代码越少越好#非空即真,非0即真#not 取反 a = []b = ' 'c = ()d = 0e = Noneif a: print('真的')else: print('假的') ...