zoukankan      html  css  js  c++  java
  • C#递归读写XML文件

    由于所需要操作的XML文件结点格式不统一,故写了一个通用递归类,代码如下:

    一、XML文件

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <appSettings>
        <Cycles>
          <SY_DT5_GSM_Month>5</SY_DT5_GSM_Month>
          <SY_DT5_GSM_Day>50</SY_DT5_GSM_Day>
        </Cycles>
      </appSettings>
      <Transmissions>
        <GSM>
          <SY_DT5_GSM Company="" Model="" COM="COM3">
            <YesterDay>2011-07-16</YesterDay>
            <LastMonth>
            </LastMonth>
          </SY_DT5_GSM>
        </GSM>
        <GRPS>
        </GRPS>
        <IP>
        </IP>
      </Transmissions>
      <connectionStrings>
        <Server>.</Server>
        <DataBase>Voltage</DataBase>
        <User>sa</User>
        <Pass>
        </Pass>
      </connectionStrings>
    </configuration>
    

    二、递归类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Xml;
    
    /// <summary>
    ///XmlRWrite 的摘要说明
    /// </summary>
    public class XmlRWrite
    {
        private string _FilePath;
        private string _ParentNode;
        private string _ChildName;
        private string _AttributeName;
    
        public XmlRWrite()
        {
    
        }
    
        /// <summary>
        /// XML文件存储路径
        /// </summary>
        public string FilePath
        {
            set
            {
                _FilePath = value;
            }
        }
    
        /// <summary>
        /// 父结点
        /// </summary>
        public string ParentNode
        {
            set
            {
                _ParentNode = value;
            }
        }
    
        /// <summary>
        /// 子结点
        /// </summary>
        public string ChildName
        {
            set
            {
                _ChildName = value;
            }
        }
    
        /// <summary>
        /// 结点属性
        /// </summary>
        public string AttributeName
        {
            set
            {
                _AttributeName = value;
            }
        }
    
        /// <summary>
        /// 递归读取XML文件结点值
        /// </summary>
        /// <param name="XNL">XmlNodeList列表</param>
        /// <returns>返回结点值</returns>
        private string ReadNodeValue(XmlNodeList XNL)
        {
            string Value = "";
            for (int i = 0; i < XNL.Count; i++)
            {
                if (Value != "")
                    break;
                if (XNL[i].Name == _ParentNode)
                {
                    foreach (XmlNode Childnode in XNL[i])
                    {
                        if (Childnode.Name == _ChildName)
                        {
                            Value = Childnode.InnerText;
                            break;
                        }
                    }
                }
                else
                {
                    XmlNodeList xnl = XNL[i].ChildNodes;
                    if (xnl.Count > 0)
                        Value = ReadNodeValue(xnl);
                }
            }
            return Value;
        }
    
        /// <summary>
        /// 递归读取XML文件结点属性值
        /// </summary>
        /// <param name="XNL">XmlNodeList列表</param>
        /// <returns>返回结点值</returns>
        private string ReadAttributeValue(XmlNodeList XNL)
        {
            string Value = "";
            for (int i = 0; i < XNL.Count; i++)
            {
                if (Value != "")
                    break;
                if (XNL[i].Name == _ParentNode)
                {
                    foreach (XmlNode Childnode in XNL[i])
                    {
                        if (Childnode.Name == _ChildName)
                        {
                            Value = Childnode.Attributes[_AttributeName].Value;
                            break;
                        }
                    }
                }
                else
                {
                    XmlNodeList xnl = XNL[i].ChildNodes;
                    if (xnl.Count > 0)
                        Value = ReadAttributeValue(xnl);
                }
            }
            return Value;
        }
    
        /// <summary>
        /// 递归设置结点值
        /// </summary>
        /// <param name="Value">结点值</param>
        /// <param name="XNL">XmlNodeList列表</param>
        private void WriteNodeValue(string Value, XmlNodeList XNL)
        {
            bool bl = false;
            for (int i = 0; i < XNL.Count; i++)
            {
                if (bl)
                    break;
                if (XNL[i].Name == _ParentNode)
                {
                    foreach (XmlNode Childnode in XNL[i])
                    {
                        if (Childnode.Name == _ChildName)
                        {
                            Childnode.InnerText = Value;
                            bl = true;
                            break;
                        }
                    }
                }
                else
                {
                    XmlNodeList xnl = XNL[i].ChildNodes;
                    if (xnl.Count > 0)
                        WriteNodeValue(Value, xnl);
                }
            }
        }
    
        /// <summary>
        /// 递归设置结点属性值
        /// </summary>
        /// <param name="Value">属性值</param>
        /// <param name="XNL">XmlNodeList列表</param>
        private void WriteAttributeValue(string Value, XmlNodeList XNL)
        {
            bool bl = false;
            for (int i = 0; i < XNL.Count; i++)
            {
                if (bl)
                    break;
                if (XNL[i].Name == _ParentNode)
                {
                    foreach (XmlNode Childnode in XNL[i])
                    {
                        if (Childnode.Name == _ChildName)
                        {
                            Childnode.Attributes[_AttributeName].Value = Value;
                            bl = true;
                            break;
                        }
                    }
                }
                else
                {
                    XmlNodeList xnl = XNL[i].ChildNodes;
                    if (xnl.Count > 0)
                        WriteAttributeValue(Value, xnl);
                }
            }
        }
    
        private XmlNodeList XNodeList()
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(_FilePath);
            XmlNodeList XNL = xmlDoc.SelectSingleNode("configuration").ChildNodes;
            return XNL;
        }
    
        /// <summary>
        /// 递归读取结点值
        /// </summary>
        /// <returns>返回值</returns>
        public string GetNodeValue()
        {
            XmlNodeList XNL = XNodeList();
            string Value = ReadNodeValue(XNL);       
            return Value;
        }
    
        /// <summary>
        /// 递归读取属性值
        /// </summary>
        /// <returns>返回值</returns>
        public string GetAttributeValue()
        {
            XmlNodeList XNL = XNodeList();
            string Value = ReadAttributeValue(XNL);
            return Value;
        }
    
        /// <summary>
        /// 递归设置结点值
        /// </summary>
        /// <param name="Value">结点值</param>
        public void SetNodeValue(string Value)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(_FilePath);
            XmlNodeList XNL = xmlDoc.SelectSingleNode("configuration").ChildNodes;
            WriteNodeValue(Value, XNL);
            xmlDoc.Save(_FilePath);
        }
    
        /// <summary>
        /// 递归设置结点属性值
        /// </summary>
        /// <param name="Value">属性值</param>
        public void SetAttributeValue(string Value)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(_FilePath);
            XmlNodeList XNL = xmlDoc.SelectSingleNode("configuration").ChildNodes;
            WriteAttributeValue(Value, XNL);
            xmlDoc.Save(_FilePath);
        }
    }
    

    三、使用方法

     protected void Button1_Click(object sender, EventArgs e)
        {
            string path = "C:\\Users\\Administrator\\Documents\\Visual Studio 2010\\WebSites\\WebSite2\\setup.xml";
    
            XmlRWrite xmlRWrite = new XmlRWrite();
            xmlRWrite.FilePath = path;
    
            //读取结点值
            xmlRWrite.ParentNode = "SY_DT5_GSM";
            xmlRWrite.ChildName = "YesterDay";
            LblMsg.Text = xmlRWrite.GetNodeValue();
            //读取属性值
            xmlRWrite.ParentNode = "GSM";
            xmlRWrite.ChildName = "SY_DT5_GSM";
            xmlRWrite.AttributeName = "COM";
            LblMsg.Text = xmlRWrite.GetAttributeValue();
    
            //设置结点值
            xmlRWrite.ParentNode = "SY_DT5_GSM";
            xmlRWrite.ChildName = "YesterDay";
            xmlRWrite.SetNodeValue("2011-07-16");
            //设置属性值
            xmlRWrite.ParentNode = "GSM";
            xmlRWrite.ChildName = "SY_DT5_GSM";
            xmlRWrite.AttributeName = "COM";
            xmlRWrite.SetAttributeValue("COM3");
    
        }
    
  • 相关阅读:
    智能移动机器人背后蕴含的技术——激光雷达
    Kalman Filters
    Fiddler抓HttpClient的包
    VSCode开发WebApi EFCore的坑
    WPF之小米Logo超圆角的实现
    windows react打包发布
    jenkins in docker踩坑汇总
    Using ML.NET in Jupyter notebooks 在jupyter notebook中使用ML.NET ——No design time or full build available
    【Linux知识点】CentOS7 更换阿里云源
    【Golang 报错】exec gcc executable file not found in %PATH%
  • 原文地址:https://www.cnblogs.com/easypass/p/2104640.html
Copyright © 2011-2022 走看看