1. 程式人生 > >C#/ASP.NET Xml多級資料讀取

C#/ASP.NET Xml多級資料讀取

<Data>
  <Project>
    <Item Id="51351132-59a7-4c0b-909d-51b89b1c3159" IsDefault="1" Path="D:\TDDOWNLOAD\Source\Report1.App" />
    <Item Id="e6fd198a-753e-42e5-a16c-e20450362795" IsDefault="1" Path="D:\TDDOWNLOAD\Source\Report2.App" />
  </Project>
  <AppSettings>
    <Item Key="conn" Value="Data Source=192.168.2.227;Initial Catalog=master;User ID=sa;pwd=sa" />
  </AppSettings>
</Data>

由於習慣的關係,所以喜歡把資料存成一行的格式,一目瞭然。

對於多行的格式有點排斥,如果資料少還好,如果多了一頁就只能看到幾條資料。

或則來個人告訴我那樣的格式有比這種好的地方(純討論)

以上是Xml的資料格式,這裡也順便提下多級的新增方式。

        /// <summary>
        /// 新增一條地址資料
        /// </summary>
        /// <param name="entity">專案地址資訊</param>
        public void Create(Project entity)
        {
            //新增一條日誌記錄
            var xmlDoc = new XmlDocument();
            xmlDoc.Load(FileName);
            var data = xmlDoc.SelectSingleNode("Data");//找到根節點

            var project = data.SelectSingleNode("Project");//找到子節點 Project
            var item = xmlDoc.CreateElement("Item");//建立子節點 Item
            
            item.SetAttribute("Id", entity.Id);
            item.SetAttribute("IsDefault", entity.IsDefault);
            item.SetAttribute("Path", entity.Path);

            project.AppendChild(item);//子項新增到 Project 節點中
            data.AppendChild(project);
            xmlDoc.Save(FileName);//儲存
        }

當然新增的前提是Xml格式已經存在了。

下面則是建立檔案和Xml的格式。

        /// <summary>
        /// 資料夾或檔案不存在則建立
        /// </summary>
        private void CreateFile()
        {
            var directoryInfo = new DirectoryInfo(FolderPath);//獲取檔案路徑資訊

            if (!directoryInfo.Exists) directoryInfo.Create();//如果資料夾不存在

            if (!File.Exists(FileName))
            {
                #region 建立預設Xml資料

                //如果檔案不存在則建立
                File.Create(FileName).Close();

                var xmlDoc = new XmlDocument();
                var data = xmlDoc.CreateElement("Data");//建立根節點
                
                var appSettings = xmlDoc.CreateElement("AppSettings");//連線字串 節點
                var project = xmlDoc.CreateElement("Project");//專案地址 節點
                data.AppendChild(appSettings);
                data.AppendChild(project);

                xmlDoc.AppendChild(data);
                xmlDoc.Save(FileName);//儲存

                #endregion
            }
        }

這裡可以新增幾條資料待會兒用來測試讀取

如果在已知Xml結構的情況下那麼可以直接找到相對應的節點下的資料。

        /// <summary>
        /// 獲取所有專案地址資料
        /// </summary>
        /// <returns></returns>
        public IList<Project> GetAllProject()
        {
            var list = new List<Project>();

            var xmlDoc = new XmlDocument();
            xmlDoc.Load(FileName);
            var xmlList = xmlDoc.SelectSingleNode("Data/Project").ChildNodes;

            foreach (XmlNode node in xmlList)
            {
                var entity = new Project
                {
                    Id = node.Attributes["Id"].Value,
                    IsDefault = node.Attributes["IsDefault"].Value,
                    Path = node.Attributes["Path"].Value,
                };
                list.Add(entity);
            }
            return list;
        }

其實程式碼就這些了,但為了拼出這些程式碼可費了我不少時間。