C#读写XML文件

XML文件作为一种新的应用程序参数存储载体,正在慢慢取代传统的INI文件和注册表,成为程序员的新宠。

新的开发语言也对XML编程提供了丰富的接口,让XML文件得以流行。

以下面的XML文件为例,介绍一下XML文件的读写方法:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
- <!-- This is a continent file to contain all continent in our world
  --> 
- <Root>
- <Continents>
  <Continent ID="101" Name="Asia" /> 
  <Continent ID="102" Name="Africa" /> 
  <Continent ID="103" Name="North America" /> 
  <Continent ID="104" Name="South America" /> 
  <Continent ID="105" Name="Europe" /> 
  <Continent ID="106" Name="Oceania" /> 
  <Continent ID="107" Name="Antarctica" /> 
  </Continents>
  </Root>

读取的代码:

            string strFilePathName = strFilePath + "\\Continent.xml";
            List<Continent> data = new List<Continent>();
            Console.WriteLine("The data is parsed from file :" + strFilePathName);

            try
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(strFilePathName);

                XmlNode xmlNode = xmlDoc.SelectSingleNode("Root");
                if (xmlNode == null)
                {
                    Console.WriteLine("Invalid file format!");
                    return;
                }

                XmlNode continentNode = xmlNode.FirstChild;
                foreach (XmlNode node in continentNode.ChildNodes)
                {
                    uint uiID = uint.Parse(node.Attributes["ID"].Value);
                    string strName = node.Attributes["Name"].Value;

                    data.Add(new Continent(uiID, strName));
                }

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.WriteLine("Parsed OK, result:");

            foreach (Continent info in data)
            {
                Console.WriteLine("ID= " + info.ID + ", Name = " + info.Name);
            }

写入的代码:

            List<Continent> data = new List<Continent>();
            uint uiIDBegin = 101;
            data.Add(new Continent(uiIDBegin++, "Asia"));
            data.Add(new Continent(uiIDBegin++, "Africa"));
            data.Add(new Continent(uiIDBegin++, "North America"));
            data.Add(new Continent(uiIDBegin++, "South America"));
            data.Add(new Continent(uiIDBegin++, "Europe"));
            data.Add(new Continent(uiIDBegin++, "Oceania"));
            data.Add(new Continent(uiIDBegin++, "Antarctica"));  
            
            try
            {
                XmlDocument xmlDoc = new XmlDocument();
                XmlDeclaration xmlDec = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", "yes");
                XmlComment xmlComment = xmlDoc.CreateComment("This is a continent file to contain all continent in our world");
                XmlElement xmlRoot = xmlDoc.CreateElement("Root");
                XmlElement xmlContinents = xmlDoc.CreateElement("Continents");
                xmlRoot.AppendChild(xmlContinents);

                foreach (Continent info in data)
                {
                    XmlElement xmlContinent = xmlDoc.CreateElement("Continent");
                    xmlContinents.AppendChild(xmlContinent);
                    xmlContinent.SetAttribute("ID", info.ID.ToString());
                    xmlContinent.SetAttribute("Name", info.Name);
                }

                xmlDoc.AppendChild(xmlDec);
                xmlDoc.AppendChild(xmlComment);
                xmlDoc.AppendChild(xmlRoot);


                XmlWriterSettings wrSettings = new XmlWriterSettings();
                wrSettings.Indent = true;
                wrSettings.Encoding = UnicodeEncoding.UTF8;
                XmlWriter xmlWr = XmlWriter.Create(xmlFilePath, wrSettings);
                xmlDoc.WriteTo(xmlWr);
                xmlWr.Flush();
                xmlWr.Close();

                Console.WriteLine("Create OK, file name = " + xmlFilePath);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }  
Continent类实现代码:
    class Continent
    {
        private uint id;
        private string name;

        public Continent(uint id, string name)
        {
            this.id = id;
            this.name = name;
        }

        public uint ID
        {
            get { return this.id;}
            set { this.id = value; }
        }

        public string Name
        {
            get { return this.name; }
            set { this.name = value; }
        }
    }

代码在WinXP+VS2010下测试通过。

posted on 2012-09-12 10:37  onedime  阅读(494)  评论(0编辑  收藏  举报