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

  1. 云栖社区>
  2. 博客>
  3. 正文

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

zting科技 2017-10-24 14:53:00 浏览490
展开阅读全文

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,如需转载请自行联系原作者


网友评论

登录后评论
0/500
评论
zting科技
+ 关注