XML 通用操作

Xml格式:

<?xml version="1.0" encoding="utf-8"?>

<remotes>

<remote ip="ipval">nameAndPwd</remote>

</remotes>

通用读写删类:

using System;

using System.Data;

using System.Web;

using System.Xml;

public class xml_oper

{

private XmlDocument xmlDoc;

public xml_oper() { }

/// <summary>

/// 加载xml文件

/// </summary>

/// <param name="path">xml文件的物理路径 </param>

private void LoadXml(string path, string node_root)

{

xmlDoc = new XmlDocument();

//判断xml文件是否存在

if (!System.IO.File.Exists(path))

{

//创建xml 声明节点

XmlNode xmlnode = xmlDoc.CreateNode(System.Xml.XmlNodeType.XmlDeclaration, "", "");

//添加上述创建和 xml声明节点

xmlDoc.AppendChild(xmlnode);

//创建xml dbGuest 元素(根节点)

XmlElement xmlelem = xmlDoc.CreateElement("", node_root, "");

xmlDoc.AppendChild(xmlelem);

try

{

xmlDoc.Save(path);

}

catch (Exception ex)

{

throw ex;

}

xmlDoc.Load(path);

}

else

{

//加载xml文件

xmlDoc.Load(path);

}

}

/// <summary>

/// 添加xml子节点

/// </summary>

/// <param name="path">xml文件的物理路径 </param>

/// <param name="node_root">根节点名称 </param>

/// <param name="node_name">添加的子节点名称 </param>

/// <param name="node_text">子节点文本 </param>

public void addElement(string path, string node_root, string node_name, string node_text, string att_name, string att_value)

{

LoadXml(path, node_root);

XmlNodeList nodeList = xmlDoc.SelectSingleNode(node_root).ChildNodes;//获取bookstore节点的所有子节点

//判断是否有节点,有节点就遍历所有子节点,看看有没有重复节点,没节点就添加一个新节点

if (nodeList.Count > 0)

{

foreach (XmlNode xn in nodeList)//遍历所有子节点

{

XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型

if (xe.GetAttribute(att_name) != att_value)

{

XmlNode xmldocSelect = xmlDoc.SelectSingleNode(node_root); //选中根节点

XmlElement son_node = xmlDoc.CreateElement(node_name); //添加子节点

son_node.SetAttribute(att_name, att_value); //设置属性

son_node.InnerText = node_text; //添加节点文本

xmldocSelect.AppendChild(son_node); //添加子节点

xmlDoc.Save(path); //保存xml文件

break;

}

}

}

else

{

XmlNode xmldocSelect = xmlDoc.SelectSingleNode(node_root); //选中根节点

XmlElement son_node = xmlDoc.CreateElement(node_name); //添加子节点

son_node.SetAttribute(att_name, att_value); //设置属性

son_node.InnerText = node_text; //添加节点文本

xmldocSelect.AppendChild(son_node); //添加子节点

xmlDoc.Save(path); //保存xml文件

}

}

/// <summary>

/// 修改节点的内容

/// </summary>

/// <param name="path">xml文件的物理路径 </param>

/// <param name="node_root">根节点名称 </param>

/// <param name="new_text">节点的新内容 </param>

/// <param name="att_name">节点的属性名 </param>

/// <param name="att_value">节点的属性值 </param>

public void UpdateElement(string path, string node_root, string new_text, string att_name, string att_value)

{

LoadXml(path, node_root);

XmlNodeList nodeList = xmlDoc.SelectSingleNode(node_root).ChildNodes;//获取bookstore节点的所有子节点

foreach (XmlNode xn in nodeList)//遍历所有子节点

{

XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型

if (xe.GetAttribute(att_name) == att_value)

{

xe.InnerText = new_text; //内容赋值

xmlDoc.Save(path);//保存

break;

}

}

}

/// <summary>

/// 删除节点

/// </summary>

/// <param name="path">xml文件的物理路径 </param>

/// <param name="node_root">根节点名称 </param>

/// <param name="att_name">节点的属性名 </param>

/// <param name="att_value">节点的属性值 </param>

public void deleteNode(string path, string node_root, string att_name, string att_value)

{

LoadXml(path, node_root);

XmlNodeList nodeList = xmlDoc.SelectSingleNode(node_root).ChildNodes;

XmlNode root = xmlDoc.SelectSingleNode(node_root);

foreach (XmlNode xn in nodeList)

{

XmlElement xe = (XmlElement)xn;

if (xe.GetAttribute(att_name) == att_value)

{

//xe.RemoveAttribute("name");//删除name属性

xe.RemoveAll();//删除该节点的全部内容

root.RemoveChild(xe);

xmlDoc.Save(path);//保存

break;

}

}

}

}

读取方法:

// 读取xml

XmlDocument doc = new XmlDocument();

doc.Load("DB.xml");

XmlNodeList nodes = doc.SelectSingleNode("remotes").ChildNodes;

foreach (XmlElement item in nodes)

{

string ipval = item.Attributes["ip"].Value; // ipval

string text = item.InnerText; // nameAndPwd

}

【Stone 制作整理,引用请写明出处谢谢合作,联系QQ:1370569】

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Net连接mysql的公共Helper类MySqlHelper.cs带MySql.Data.dll下载

    MySqlHelper.cs代码如下: using System; using System.Collections.Generic; using System...

    Java中文社群_老王
  • 聊聊excel生成图片的几种方式

    目录     I:需求。    II:实现思路。     III:实现方式。     IV:优缺点分析。     V:结论。     VI:wps安装与配置。 ...

    Java中文社群_老王
  • C# 图片识别(支持21种语言)

    图片识别的技术到几天已经很成熟了,只是相关的资料很少,为了方便在此汇总一下(C#实现),方便需要的朋友查阅,也给自己做个记号。 图片识别的用途:很多人用它去破解...

    Java中文社群_老王
  • Hive快速入门系列(11) | Hive的自定义函数

      我们可以看到hive自带的函数就有两百多个,但我们平时经常用到的可能就那么几个,并且自带的函数功能还十分受限!有时候,为了更好的实现业务需求,这时就需要我们...

    不温卜火
  • 【二叉树打卡2】从上往下打印二叉树

    这个像相当于二叉树四种遍历中的层序遍历了,其思想是采用广度优先遍历,借助一个辅助队列,步骤如下:

    帅地
  • 联机日志文件过小引发的log file 相关等待

          Oracle 联机重做日志文件记录了数据库的所有变化(DML,DDL或管理员对数据所作的结构性更改等),用于对于意外删除或宕机利用日志文件实现数据恢...

    Leshami
  • 二叉树的前中后序遍历

    前序遍历主要思想是什么呢?从根节点开始,前序遍历访问左子树,遇到空节点则返回,然后再前序遍历访问右子树,遇到空节点则返回。

    看、未来
  • iOS UI控件了解一下

    5. UIView的操作方法 1)添加视图 UIView的addSubview:方法可以添加子视图,对于同一个视图的所有子视图来讲,后添加的子视图会把已加的子...

    用户5521279
  • MYSQL数据导出与导入,secure_file_priv参数设置

    [Code: 1290, SQL State: HY000] The MySQL server is running with the –secure-fil...

    学到老
  • ceph开源监控软件对比

    目前主流的Ceph开源监控软件有:Calamari、VSM、Inkscope、Ceph-Dash、Zabbix等,下面简单介绍下各个开源组件。

    Lucien168

扫码关注云+社区

领取腾讯云代金券