C#操作XML通用方法汇总

2019-12-30 14:12:55王旭

 在.net的项目开发中,经常会对XML文件进行操作,由于XML文件可以实现跨平台传输,较多的应用在数据传输中,特总结以下几种常用的XML操作方法:

1.创建XML文档:


  /// <summary>
  /// 创建XML文档
  /// </summary>
  /// <param name="name">根节点名称</param>
  /// <param name="type">根节点的一个属性值</param>
  /// <returns>XmlDocument对象</returns>  
  public static XmlDocument CreateXmlDocument(string name, string type)
  {
   XmlDocument doc;
   try
   {
    doc = new XmlDocument();
    doc.LoadXml("<" + name + "/>");
    var rootEle = doc.DocumentElement;
    rootEle?.SetAttribute("type", type);
   }
   catch (Exception er)
   {
    throw new Exception(er.ToString());
   }
   return doc;
  }

2.读取XML文档中的数据:


  /// <summary>
  /// 读取数据
  /// </summary>
  /// <param name="path">路径</param>
  /// <param name="node">节点</param>
  /// <param name="attribute">属性名,非空时返回该属性值,否则返回串联值</param>
  /// <returns>string</returns>
  public static string Read(string path, string node, string attribute)
  {
   var value = "";
   try
   {
    var doc = new XmlDocument();
    doc.Load(path);
    var xn = doc.SelectSingleNode(node);
    if (xn != null && xn.Attributes != null)
     value = (attribute.Equals("") ? xn.InnerText : xn.Attributes[attribute].Value);
   }
   catch (Exception er)
   {
    throw new Exception(er.ToString());
   }
   return value;
  }

3.对XML文档插入数据:


  /// <summary>
  /// 插入数据
  /// </summary>
  /// <param name="path">路径</param>
  /// <param name="node">节点</param>
  /// <param name="element">元素名,非空时插入新元素,否则在该元素中插入属性</param>
  /// <param name="attribute">属性名,非空时插入该元素属性值,否则插入元素值</param>
  /// <param name="value">值</param>
  /// <returns></returns>
  public static void Insert(string path, string node, string element, string attribute, string value)
  {
   try
   {
    var doc = new XmlDocument();
    doc.Load(path);
    var xn = doc.SelectSingleNode(node);
    if (element.Equals(""))
    {
     if (!attribute.Equals(""))
     {
      var xe = (XmlElement)xn;
      xe?.SetAttribute(attribute, value);
      //xe?.SetAttribute(attribute, value);
     }
    }
    else
    {
     var xe = doc.CreateElement(element);
     if (attribute.Equals(""))
      xe.InnerText = value;
     else
      xe.SetAttribute(attribute, value);
     xn?.AppendChild(xe);
    }
    doc.Save(path);
   }
   catch (Exception er)
   {
    throw new Exception(er.ToString());
   }
  }