C#遞迴讀寫XML檔案

來源:互聯網
上載者:User

由於所需要操作的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");    }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.