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下测试通过。