C#/ASP.NET Xml多级数据读取

来源:互联网 发布:编辑地图软件哪个最好 编辑:程序博客网 时间:2024/05/21 10:06

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;        }

其实代码就这些了,但为了拼出这些代码可费了我不少时间。