개발공부

c# XML 저장 불러오기

파란색까마귀 2022. 2. 13. 22:08

2016. 3. 2. 18:36

https://blog.naver.com/nagne2011/220643685663

 

    class Item
    {
        public int index;
        public string name;
 
        public Item(int index, string name)
        {
            this.index = index;
            this.name = name;
        }
 
        public void ShowInfo()
        {
            Console.WriteLine("Item Index : {0}, Item Name : {1}", index, name);
        }
    }

 

class SaveXml
    {
        private List<Item> itemList = null;                 //리스트에 저장할 예정
        private const string path = "./SaveXml";            //주소는 이곳이다. 
 
        public SaveXml()
        {
            itemList = new List<Item>();                    //리스트 만듬
            itemList.Add(new Item(1, "청동검"));            //새로운 아이템 생성
            itemList.Add(new Item(2, "가죽갑옷"));              
            itemList.Add(new Item(3, "가죽방패"));
            itemList.Add(new Item(4, "포션"));
 
            Console.WriteLine("디폴트 아이템 생성 완료");
            for(int i=0; i <itemList.Count; ++i)            //만든 아이템들 정보를 담아준다
            {
                itemList[i].ShowInfo();
            }
 
            Directory.CreateDirectory(path);
        }
 
        //저장시작
        public void SaveData(string fileName = "SaveXml.xml")
        {
            XmlWriter xmlWriter = null;
            try
            {
                XmlWriterSettings setting = new XmlWriterSettings();
                setting.Indent = true;                              //띄어쓰기 사용(아마도)
                setting.Encoding = Encoding.UTF8;                   //<?xml version="1.0" encoding="UTF-8"?> (만들어진 XML파일에서 확인가능) UTF8로 생성
 
                string fullPath = path + "/" + fileName;
                xmlWriter = XmlWriter.Create(fullPath, setting);    //생성
            }
            catch( Exception e)
            {
                Console.WriteLine(e.Message);
                return;
            }
 
            xmlWriter.WriteStartElement("ItemList");    
            for( int i=0 ; i<itemList.Count ; ++i)
            {//리스트를 전부 돌면서 해당 검색
                xmlWriter.WriteStartElement("Item");
 
                xmlWriter.WriteStartElement("Index");
                xmlWriter.WriteString(itemList[i].index.ToString());
                xmlWriter.WriteEndElement();
 
                xmlWriter.WriteStartElement("Name");
                xmlWriter.WriteString(itemList[i].name);
                xmlWriter.WriteEndElement();
 
                xmlWriter.WriteEndElement();
            }
            xmlWriter.WriteEndElement();
            xmlWriter.Close();
        }
    }

 

 class LoadXml
    {
        private List<Item> itemList = null;
        private const string path = "./SaveXml";
 
        public LoadXml()
        {
            itemList = new List<Item>();
        }
 
        //LoadXmlDataFromFile방식
        public void LoadXmlDataFromFile(string fileName = "SaveXml.xml")      
        {
            XmlReader xmlReader = null;
 
            try
            {
                XmlReaderSettings xmlSetting = new XmlReaderSettings();
                xmlSetting.IgnoreWhitespace = true;
                xmlSetting.IgnoreComments = true;
 
                string fullPath = path + "/" + fileName;
                //읽은 내용을 기반으로 xmlReader에 저장
                xmlReader = XmlReader.Create(fullPath, xmlSetting); 
 
                itemList.Clear();
                while (xmlReader.ReadToFollowing("Index"))
                {//xmlReader를 돌면서 해당 내용에 맞게 아이템을 Add한다
                    int index = xmlReader.ReadElementContentAsInt();
                    string name = xmlReader.ReadElementContentAsString();
 
                    itemList.Add(new Item(index, name));
                }
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
 
            xmlReader.Close();
            PrintXmlData();
        }
 
        //LoadXmlDataFromString방식
        public void LoadXmlDataFromString()
        {
            XmlReader xmlReader = null;
            string xmlString =
                "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<ItemList>                                " +
                "  <Item>                                  " +
                "    <Index>11</Index>                      " +
                "    <Name>청동검</Name>                   " +
                "  </Item>                                 " +
                "  <Item>                                  " +
                "    <Index>12</Index>                      " +
                "    <Name>가죽갑옷</Name>                 " +
                "  </Item>                                 " +
                "  <Item>                                  " +
                "    <Index>13</Index>                      " +
                "    <Name>가죽방패</Name>                 " +
                "  </Item>                                 " +
                "  <Item>                                  " +
                "    <Index>14</Index>                      " +
                "    <Name>포션</Name>                     " +
                "  </Item>                                 " +
                "</ItemList>                               ";
            
            try
            {
                XmlReaderSettings xmlSetting = new XmlReaderSettings();
                xmlSetting.IgnoreWhitespace = true;
                xmlSetting.IgnoreComments = true;
 
                StringReader reader = new StringReader(xmlString);
                xmlReader = XmlReader.Create(reader, xmlSetting);
 
                itemList.Clear();
                while (xmlReader.ReadToFollowing("Index"))
                {
                    int index = xmlReader.ReadElementContentAsInt();
                    string name = xmlReader.ReadElementContentAsString();
 
                    itemList.Add(new Item(index, name));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
 
            xmlReader.Close();
            PrintXmlData();
        }
 
        
        public void PrintXmlData()
        {//리스트에 저장된 대로쭉 출력해준다
            Console.WriteLine("읽어들인 아이템 목록");
            for( int i=0 ; i<itemList.Count ; ++i)
            {
                itemList[i].ShowInfo();
            }
        }
    }
            //파일 입출력(XML)
            Console.WriteLine("\n\n\n\n\nXML 파일입출력==================");
            SaveXml saveXml = new SaveXml();
            saveXml.SaveData();
            LoadXml loadXml = new LoadXml();
            loadXml.LoadXmlDataFromFile();
            loadXml.LoadXmlDataFromString();

728x90

'개발공부' 카테고리의 다른 글

개발툴 - 0 - Git  (0) 2022.02.15
예외처리 try, catch, throw  (0) 2022.02.14
c# 텍스트 저장  (0) 2022.02.13
c# try-catch  (0) 2022.02.13
c# 함수 상속  (0) 2022.02.13