c#操作xml檔案

來源:互聯網
上載者:User

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace XMLTest
{
    public class CommXml
    {
        public XmlDocument xmlDoc = new XmlDocument();
        public void getXmlDoc(string strXml)
        {
            xmlDoc.LoadXml(strXml);
        }

        public CommXml(string strXml)
        {
            xmlDoc.LoadXml(strXml);

        }

        /// <summary>
        /// 從父節點開始,中間用逗號隔開
        /// </summary>
        /// <param name="strNode">節點名稱</param>
        /// <param name="strValue">節點值</param>
        public void setNodeValue(string strNode, string strValue)
        {
            XmlNode xn = getNode(strNode);
            xn.InnerText = strValue;

        }

        /// <summary>
        /// 根據逗號相隔節點名稱取得當前節點
        /// </summary>
        /// <param name="strNode"></param>
        /// <returns></returns>
        private XmlNode getNode(string strNode)
        {
            XmlNode xn = null;

            string[] strNodeNameArr = strNode.Trim(',').Split(',');

            foreach (string strNodeName in strNodeNameArr)
            {
                if (xn == null)
                {
                    if (strNodeName.IndexOf("*") > 0)
                    {
                        xn = getNodeListNode(strNodeName, xmlDoc);
                    }
                    else
                    {
                        xn = xmlDoc.SelectSingleNode(strNodeName);
                    }
                }
                else
                {
                    if (strNodeName.IndexOf("*") > 0)
                    {
                        xn = getNodeListNode(strNodeName, xn);
                    }
                    else
                    {
                        xn = xn.SelectSingleNode(strNodeName);
                    }
                    if (xn == null) throw new Exception("節點" + strNodeName + "不存在.");
                }

            }

            return xn;

        }

        /// <summary>
        /// 節點列表中單個節點取得
        /// </summary>
        /// <param name="strNode">節點列表節點名稱:例;nodename*0 指節點名稱是nodename的節點數組下標是0的節點取得</param>
        /// <param name="fatherXn">當前節點的父親節點</param>
        /// <returns></returns>
        private XmlNode getNodeListNode(string strNode, XmlNode fatherXn)
        {
            XmlNode xn = null;
            string[] strNodeListNameAndArrNum = strNode.Split('*');
            XmlNodeList xnList = fatherXn.SelectNodes(strNodeListNameAndArrNum[0]);
            xn = xnList.Item(Convert.ToInt32(strNodeListNameAndArrNum[1]));
            return xn;
        }

        /// <summary>
        ///  節點屬性值設定
        /// </summary>
        /// <param name="strNode">從父節點開始,中間用逗號隔開</param>
        /// <param name="strAttributeName">節點名稱</param>
        /// <param name="strValue">節點值</param>
        public void setNodeAttributes(string strNode, string strAttributeName, string strValue)
        {
            XmlNode xn = getNode(strNode);
            try
            {
                xn.Attributes[strAttributeName].Value = strValue;
            }
            catch
            {
                throw new Exception("節點" + strNode + "不存在屬性[" + strAttributeName + "].");

            }
        }

        /// <summary>
        /// 節點屬性值取得
        /// </summary>
        /// <param name="strNode">從父節點開始,中間用逗號隔開</param>
        /// <param name="strAttributeName">節點名稱</param>
        /// <returns></returns>
        public string getNodeAributeValue(string strNode, string strAttributeName)
        {
            try
            {
                XmlNode xn = getNode(strNode);
                return xn.Attributes[strAttributeName].Value;
            }
            catch
            {
                throw new Exception("節點" + strNode + "不存在屬性[" + strAttributeName + "].");

            }

        }

        /// <summary>
        /// 數組也表資料節點屬性值設定
        /// </summary>
        /// <param name="strNode">從父節點開始,中間用逗號隔開</param>
        /// <param name="strAttributeName">節點名稱</param>
        /// <param name="strValue">節點值</param>
        /// <param name="arrNum">數組節點下標,從0開始</param>
        public void setNodeListAttributes(string strNode, string strAttributeName, string strValue, int arrNum)
        {

        }

        public void test()
        {

            string strXml = @" <battleArmies>
 <battleArmy side=""1"">
 <battleTroops>
 <battleTroop position=""0"">
 <battleTeams>
 <battleTeam id=""1000"" x=""15"" y=""7"" hp=""80.0"" amount=""8"">
 <soldierConfig name=""老虎"" type=""LAO_HU"" category=""2"" attack=""18.0"" defence=""15.0"" hp=""10.0"" moveSpeed=""10.0"" attackScope=""1.0"" attackSpeed=""15.0"" destroy=""null"" critical=""null"" criticalRate=""null"">
<attackAddon key_0=""2.83"" key_1=""1.0"" key_2=""1.0"" key_3=""1.0"" key_4=""1.0"" />
</soldierConfig>
 <soldierAddonConfig name=""老虎"" type=""LAO_HU"" category=""2"" attack=""18.18"" defence=""15.15"" hp=""10.0"" moveSpeed=""10.0"" attackScope=""1.0"" attackSpeed=""15.0"" destroy=""null"" critical=""null"" criticalRate=""null"">
<attackAddon key_0=""2.83"" key_1=""1.0"" key_2=""1.0"" key_3=""1.0"" key_4=""1.0"" />
</soldierAddonConfig>
</battleTeam>
 </battleTeams>
 </battleTroop>
 </battleTroops>
 </battleArmy>
 </battleArmies>
";
            CommXml xml = new CommXml(strXml);
            xml.setNodeAttributes("battleArmies,battleArmy,battleTroops,battleTroop,battleTeams,battleTeam*0,soldierConfig*0,attackAddon", "key_0", "2999");
            string strNodeValue = xml.getNodeAributeValue("battleArmies,battleArmy,battleTroops,battleTroop,battleTeams,battleTeam*0,soldierConfig*0,attackAddon", "key_0");

        }
    }

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.