이번에는 XML파일을 XmlTextReader 클래스를 이용하여 읽는 방법에 대해 살펴보도록 하자.
읽고자하는 XML 파일
<?xml version="1.0"?> <!--This file stores application version list--> <Programs> <Program> <ID>ZemnaAutoUpdater</ID> <Name>Zemna Auto Updater</Name> <Contents>하하하하하</Contents> <RegistrationDate>2009-02-27 오전 11:28:02</RegistrationDate> <Versions> <Version> <VersionNo>1.0.0</VersionNo> <RegistrationDate>2009-02-27 오전 11:28:02</RegistrationDate> <EditDate>2009-02-27 오전 11:28:02</EditDate> <FolderPath>cadfasd</FolderPath> <Files> <File>123.tx</File> </Files> </Version> </Versions> </Program> </Programs>
위 파일을 읽는 코드는 아래와 같다.
XmlTextReader로 파일 읽기 샘플
List<ProgramInfo> IDataProcessor.LoadList(string filePath) { // 데이터를 저장 할 변수 선언 List<ProgramInfo> listPrg = null; int piIdx = 0; // Last ProgramInfo Index int viIdx = 0; // Last VersionInfo Index XmlTextReader reader = new XmlTextReader(filePath); // 공백을 처리하지 않음 reader.WhitespaceHandling = WhitespaceHandling.None; while (reader.Read()) { reader.MoveToContent(); if (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { case "Program": if (listPrg == null) listPrg = new List<ProgramInfo>(); ProgramInfo pi = new ProgramInfo(); listPrg.Add(pi); piIdx = listPrg.Count - 1; break; case "ID": listPrg[piIdx].ID = reader.ReadString(); break; case "Name": listPrg[piIdx].Name = reader.ReadString(); break; case "Contents": listPrg[piIdx].Contents = reader.ReadString(); break; case "RegistrationDate": if (reader.Depth == 2) listPrg[piIdx].RegistrationDate = Convert.ToDateTime(reader.ReadString()); else listPrg[piIdx].Versions[viIdx].RegistrationDate = Convert.ToDateTime(reader.ReadString()); break; case "Version": if (listPrg[piIdx].Versions == null) listPrg[piIdx].Versions = new List<VersionInfo>(); VersionInfo vi = new VersionInfo(); listPrg[piIdx].Versions.Add(vi); viIdx = listPrg[piIdx].Versions.Count - 1; break; case "VersionNo": listPrg[piIdx].Versions[viIdx].VersionNo = reader.ReadString(); break; case "EditDate": listPrg[piIdx].Versions[viIdx].EditDate = Convert.ToDateTime(reader.ReadString()); break; case "FolderPath": listPrg[piIdx].Versions[viIdx].FolderPath = reader.ReadString(); break; case "File": if (listPrg[piIdx].Versions[viIdx].FileList == null) listPrg[piIdx].Versions[viIdx].FileList = new List<string>(); listPrg[piIdx].Versions[viIdx].FileList.Add(reader.ReadString()); break; } } } reader.Close(); return listPrg; }