C# XML操作总结2 包括读取、插入、修改、删除

简介:

C#:XML操作总结2  包括读取、插入、修改、删除

1、读取节点中某一个属性的值

/// <summary>
/// 读取节点中某一个属性的值。如果attribute为空,则返回整个节点的InnerText,否则返回具体attribute的值
/// </summary>
/// <param name="path">xml文件路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">节点中的属性</param>
/// <returns>如果attribute为空,则返回整个节点的InnerText,否则返回具体attribute的值</returns>
/// 使用实例: XMLHelper.Read(path, "PersonF/person[@Name='Person2']", "");
///  XMLHelper.Read(path, "PersonF/person[@Name='Person2']", "Name");
public  static  string  Read( string  path, string  node, string  attribute)
{
     string  value = "" ;
     try
     {
         XmlDocument doc = new  XmlDocument();
         doc.Load(path);
         XmlNode xn = doc.SelectSingleNode(node);
         value = (attribute.Equals( "" ) ? xn.InnerText : xn.Attributes[attribute].Value);
     }
     catch (Exception e)
     {
         Console.WriteLine(e.Message);
     }
     return  value;
}

 2、 向节点中增加节点元素,属性

/// <summary>
/// 向节点中增加节点元素,属性
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">要操作的节点</param>
/// <param name="element">要增加的节点元素,可空可不空。非空时插入新的元素,否则插入该元素的属性</param>
/// <param name="attribute">要增加的节点属性,可空可不空。非空时插入元素值,否则插入元素值</param>
/// <param name="value">要增加的节点值</param>
/// 使用实例:XMLHelper.Insert(path, "PersonF/person[@Name='Person2']","Num", "ID", "88");
/// XMLHelper.Insert(path, "PersonF/person[@Name='Person2']","Num", "", "88");
/// XMLHelper.Insert(path, "PersonF/person[@Name='Person2']", "", "ID", "88");
public  static  void  Insert( string  path, string  node, string  element, string  attribute, string  value)
{
     try
     {
         XmlDocument doc = new  XmlDocument();
         doc.Load(path);
         XmlNode xn = doc.SelectSingleNode(node);
         //如果element,则增加该属性
         if  ( string .IsNullOrEmpty(element))
         {
             //如果attribute不为空,增加该属性
             if  (! string .IsNullOrEmpty(attribute))
             {
                
                 XmlElement xe = (XmlElement)xn;
                 // <person Name="Person2" ID="88"> XMLHelper.Insert(path, "PersonF/person[@Name='Person2']","Num", "ID", "88");
                 xe.SetAttribute(attribute, value);
             }
         }
         else  //如果element不为空,则preson下增加节点  
         {
             XmlElement xe = doc.CreateElement(element);
             if  ( string .IsNullOrEmpty(attribute))
                 // <person><Num>88</Num></person>  XMLHelper.Insert(path, "PersonF/person[@Name='Person2']","Num", "", "88");
                 xe.InnerText = value;
             else
                 // <person> <Num ID="88" /></person>  XMLHelper.Insert(path, "PersonF/person[@Name='Person2']", "", "ID", "88");
                 xe.SetAttribute(attribute, value);
             xn.AppendChild(xe);
         }
         doc.Save(path);
     }
     catch  (Exception e)
     {
         Console.WriteLine(e.Message);
     }
}

  3、修改节点值

/// <summary>
/// 修改节点值
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">要修改的节点</param>
/// <param name="attribute">属性名,非空时修改节点的属性值,否则修改节点值</param>
/// <param name="value">属性值</param>
/// 实例 XMLHelper.Update(path, "PersonF/person[@Name='Person3']/ID", "", "888");
/// XMLHelper.Update(path, "PersonF/person[@Name='Person3']/ID", "Num", "999");
public  static  void  Update( string  path, string  node, string  attribute, string  value)
{
     try
     {
         XmlDocument doc = new  XmlDocument();
         doc.Load(path);
         XmlNode xn = doc.SelectSingleNode(node);
         XmlElement xe = (XmlElement)xn;
         if  ( string .IsNullOrEmpty(attribute))
             xe.InnerText = value; //原<ID>2</ID> 改变:<ID>888</ID>  XMLHelper.Update(path, "PersonF/person[@Name='Person3']/ID", "", "888");
         else
             xe.SetAttribute(attribute, value); //原<ID Num="3">888</ID> 改变<ID Num="999">888</ID>    XMLHelper.Update(path, "PersonF/person[@Name='Person3']/ID", "Num", "999");
         doc.Save(path);
     }
     catch  (Exception e)
     {
         Console.WriteLine(e.Message);
     }
}

  

 4、删除数据

/// <summary>
/// 删除数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">要删除的节点</param>
/// <param name="attribute">属性,为空则删除整个节点,不为空则删除节点中的属性</param>
/// 实例:XMLHelper.Delete(path, "PersonF/person[@Name='Person3']/ID", "");
/// XMLHelper.Delete(path, "PersonF/person[@Name='Person3']/ID", "Num");
public  static  void  Delete( string  path, string  node, string  attribute)
{
     try
     {
         XmlDocument doc = new  XmlDocument();
         doc.Load(path);
         XmlNode xn = doc.SelectSingleNode(node);
         XmlElement xe = (XmlElement)xn;
         if  ( string .IsNullOrEmpty(attribute))
             xn.ParentNode.RemoveChild(xn); // <ID Num="999">888</ID>的整个节点将被移除  XMLHelper.Delete(path, "PersonF/person[@Name='Person3']/ID", "");
         else
             xe.RemoveAttribute(attribute); //<ID Num="999">888</ID> 变为<ID>888</ID> XMLHelper.Delete(path, "PersonF/person[@Name='Person3']/ID", "Num");
         doc.Save(path);
     }
     catch  (Exception e)
     {
         Console.WriteLine(e.Message);
     }
}

  

5、调用方法

public  static  void  XMLMTest()
   {
       string  path = "http://www.cnblogs.com/../Person.xml" ;
       XMLHelper.Read(path, "PersonF/person[@Name='Person2']" , "Name" );
 
       XMLHelper.Insert(path, "PersonF/person[@Name='Person2']" , "Num" , "ID" , "88" );
       XMLHelper.Insert(path, "PersonF/person[@Name='Person2']" , "Num" , "" , "88" );
       XMLHelper.Insert(path, "PersonF/person[@Name='Person2']" , "" , "ID" , "88" );
 
       XMLHelper.Update(path, "PersonF/person[@Name='Person3']" , "Num" , "888" );
       XMLHelper.Update(path, "PersonF/person[@Name='Person3']/ID" , "Num" , "999" );
       XMLHelper.Update(path, "PersonF/person[@Name='Person3']/ID" , "" , "888" );
 
       XMLHelper.Delete(path, "PersonF/person[@Name='Person3']/ID" , "Num" );
 
       XMLHelper.Delete(path, "PersonF/person[@Name='Person3']/ID" , "" );
 
   }

  

6、XML文件

<?xml version= "1.0"  encoding= "utf-8" ?>
<PersonF xmlns= ""  Name= "work hard work smart!" >
   <person Name= "Person1" >
     <ID>1</ID>
     <Name>XiaoA</Name>
     <Age>59</Age>
   </person>
   <person Name= "Person2"  ID= "88" >
     <ID>2</ID>
     <Name>XiaoB</Name>
     <Age>29</Age>
     <Num ID= "88"  />
     <Num>88</Num>
   </person>
   <person Name= "Person3" >
     <ID Num= "999" >888</ID>
     <Name>XiaoC</Name>
     <Age>103</Age>
   </person>
   <person Name= "Person4" >
     <ID>4</ID>
     <Name>XiaoD</Name>
     <Age>59</Age>
   </person>
   <person Name= "Person5" >
     <Name>work hard work smart!</Name>
     <ID>32</ID>
   </person>
   <person Name= "Person5" >
     <Name>work hard work smart!</Name>
     <ID>32</ID>
   </person>
</PersonF>

 

下文是对C#对XML的具体操作总结1

C# XML操作总结2  包括读取、插入、修改、删除

如何完成.Net下XML文档的读写操作

C#操作xml SelectNodes,SelectSingleNode总是返回NULL 与 xPath 介绍

C#中用SelectSingleNode方法解析带有多个命名空间的XML文件

 

本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2011/12/15/2288903.html,如需转载请自行联系原作者


目录
相关文章
|
4月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
|
4月前
|
XML Java 开发工具
jdom操作xml实战
jdom操作xml实战
|
12月前
|
XML 存储 C#
C#三十 Ado.net和XML
C#三十 Ado.net和XML
52 0
|
3月前
|
XML Java 数据格式
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
36 1
|
4月前
|
XML 存储 C#
C# xml文档反序列化记事
本文介绍了使用XmlSerializer进行XML序列化和反序列化的关键点。包括:1) 以独占方式读取XML文件以避免并发问题;2) 当元素名与类型名不一致时,可通过`[XmlArrayItem]`指定元素名,或创建继承自原始类型的子类;3) 处理DateTime反序列化错误,通过中间字符串属性转换;4) 提到了常用C#特性如`[XmlRoot]`, `[XmlElement]`, `[XmlAttribute]`, `[XmlIgnore]`和`[XmlArrayItem]`的作用。
|
4月前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
82 1
|
4月前
|
XML 存储 JSON
c#XML、JSON的序列化和反序列化,看完你就懂了
c#XML、JSON的序列化和反序列化,看完你就懂了
73 0
|
4月前
|
XML 开发框架 .NET
C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService
## 第二部分:ADO.NET、XML、HTTP、AJAX、WebService #### 1. .NET 和 C# 有什么区别? .NET(通用语言运行时): ```c# 定义:.NET 是一个软件开发框架,提供了一个通用的运行时环境,用于在不同的编程语言中执行代码。 作用:它为多语言支持提供了一个统一的平台,允许不同的语言共享类库和其他资源。.NET 包括 Common Language Runtime (CLR)、基础类库(BCL)和其他工具。 ``` C#(C Sharp): ```c# 定义: C# 是一种由微软设计的面向对象的编程语言,专门为.NET 平台开发而创建。 作
257 2
|
4月前
|
XML 存储 JavaScript
深入学习 XML 解析器及 DOM 操作技术
所有主要的浏览器都内置了一个XML解析器,用于访问和操作XML XML 解析器 在访问XML文档之前,必须将其加载到XML DOM对象中 所有现代浏览器都有一个内置的XML解析器,可以将文本转换为XML DOM对象
105 0
|
4月前
|
XML Java 数据库连接
Mybatis之简介、使用操作(安装、XML、SqlSession、映射的SQL语句、命名空间、作用域和生命周期)
【1月更文挑战第2天】 MyBatis 是一款优秀的持久层框架 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程 MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。
146 2
Mybatis之简介、使用操作(安装、XML、SqlSession、映射的SQL语句、命名空间、作用域和生命周期)