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");

 

   } 

猜你喜欢

转载自blog.csdn.net/huang714/article/details/108895880