1,网上关于读取写入Xml的博客比较多,参考了发现提到Xml文件权限的博客比较少。因为在开发中我发现,如果文件存于一些没有权限的路径,代码是访问不到该文件,页面会报错提示403,Forbidden。意思是禁止,也就是没有权限。需要用代码给文件EveryOne赋予完全控制权限。希望我的博客能帮助一些在权限方面遇到问题的朋友。

2,判断文件文件夹和文件是否存在(写入时会自动创建Xml,但是如果没有权限,会创建失败,所以我觉得先用FileStream把文件创建出来比较保险);

  1. public string CreateFolder()
  2. {
  3. string fileName = "myXml";
  4. string folderPath = "C:\\Configurations";
  5. string filePath = @"C:\\Configurations\" + fileName + ".xml";
  6. if (!Directory.Exists(folderPath))
  7. {
  8. Directory.CreateDirectory(folderPath);
  9. //给文件夹Everyone赋完全控制权限
  10. DirectorySecurity folderSec = new DirectorySecurity();
  11. folderSec.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
  12. System.IO.Directory.SetAccessControl(folderPath, folderSec);
  13. CreateFile(filePath);
  14.  
  15. }
  16. else
  17. {
  18. CreateFile(filePath);
  19. }
  20. return filePath;
  21. }
  1. public void CreateFile(string filePath)
  2. {
  3. if (!File.Exists(filePath))
  4. {
  5. using (FileStream fs1 = new FileStream(filePath, FileMode.Create, FileAccess.Write))
  6. {
  7. //给Xml文件EveryOne赋完全控制权限
  8. DirectorySecurity fSec = new DirectorySecurity();
  9. fSec.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
  10. System.IO.Directory.SetAccessControl(filePath, fSec);
  11. }
  12.  
  13. }
  14. }

3,文件夹和文件都创建出来以后就是写入了。

(1)Xml有几个重要的对象。、|XmlDocument,Xml文档对象|XmlDeclaration,Xml文档定义对象|XmlElement,Xml节点对象|XmlAttrbute,Xml节点属性对象|

了解了这几个对象,开发起来就比较顺了。

  1. List<Person> list = new List<Person>();
  2. list.Add(new Person() { Name = "张三", Age = , Email = "hl@yahoo.com" });
  3. list.Add(new Person() { Name = "李四", Age = , Email = "xzl@yahoo.com" });
  4. list.Add(new Person() { Name = "王五", Age = , Email = "hhw@yahoo.com" });
  5. list.Add(new Person() { Name = "赵六", Age = , Email = "ys@yahoo.com" });
  6.  
  7. //1.创建一个Dom对象
  8. XmlDocument xDoc = new XmlDocument();
  9. //2.编写文档定义
  10. XmlDeclaration xmlDec = xDoc.CreateXmlDeclaration("1.0", "utf-8", null);
  11. xDoc.AppendChild(xmlDec);
  12.  
  13. //3.编写一个根节点
  14. XmlElement xmlRoot = xDoc.CreateElement("List");
  15. xDoc.AppendChild(xmlRoot);
  16.  
  17. //4.循环创建Person节点
  18. for (int i = ; i < list.Count; i++)
  19. {
  20. //4.1创建一个Person元素
  21. XmlElement xmlPerson = xDoc.CreateElement("Person");
  22. XmlAttribute xmlAttrId = xDoc.CreateAttribute("id");
  23. xmlAttrId.Value = (i + ).ToString();
  24. //将属性增加到Person节点中
  25. xmlPerson.Attributes.Append(xmlAttrId);
  26.  
  27. //4.2在这里向Person节点下增加子节点
  28. //创建Name
  29. XmlElement xmlName = xDoc.CreateElement("Name");
  30. xmlName.InnerText = list[i].Name;
  31. xmlPerson.AppendChild(xmlName);
  32.  
  33. //创建Age
  34. XmlElement xmlAge = xDoc.CreateElement("Age");
  35. xmlAge.InnerText = list[i].Age.ToString();
  36. xmlPerson.AppendChild(xmlAge);
  37.  
  38. //创建一个Email节点
  39.  
  40. XmlElement xmlEmail = xDoc.CreateElement("Email");
  41. xmlEmail.InnerText = list[i].Email;
  42. xmlPerson.AppendChild(xmlEmail);
  43.  
  44. //最后把Person加到根节点下
  45. xmlRoot.AppendChild(xmlPerson);
  46.  
  47. }
  48.  
  49. //5.将xmlDocument对象写入到文件中
  50. xDoc.Save(@"C:\Configurations\myXml.xml");

4,Xml读取

  1. public DataTable GetDataFromXml()
  2. {
  3. string fileName = "myXml";
  4. string filePath = @"C:\\Configurations\" + fileName + ".xml";
  5. DataTable dt = this.BuildDataTable();
  6. try
  7. {
  8. XmlDocument document = new XmlDocument();
  9. document.Load(filePath);
  10. XmlElement rootElement = document.DocumentElement;
  11.  
  12. dt = LoadToTreeByXmlDocument(rootElement, dt);
  13.  
  14. return dt;
  15. }
  16. catch
  17. {
  18. return dt;
  19. }
  20. }
  21. private DataTable LoadToTreeByXmlDocument(XmlElement rootElement, DataTable dt)
  22. {
  23. try
  24. {
  25. foreach (XmlNode node in rootElement.ChildNodes)
  26. {
  27. if (node.NodeType == XmlNodeType.Element)
  28. {
  29. DataRow dr = dt.NewRow();
  30. foreach (DataColumn dc in dt.Columns)
  31. {
  32. dr[dc.ColumnName] = node.Attributes[dc.ColumnName] == null ? "" : node.Attributes[dc.ColumnName].Value;
  33. }
  34. dt.Rows.Add(dr);
  35. //遍历二级节点
  36. foreach (XmlNode subNode in node.ChildNodes)
  37. {
  38. if (subNode.NodeType == XmlNodeType.Element)
  39. {
  40. DataRow subDr = dt.NewRow();
  41. foreach (DataColumn dc in dt.Columns)
  42. {
  43. subDr[dc.ColumnName] = subNode.Attributes[dc.ColumnName] == null ? "" : subNode.Attributes[dc.ColumnName].Value;
  44. }
  45. dt.Rows.Add(subDr);
  46. }
  47. }
  48. }
  49. }
  50. return dt;
  51. }
  52. catch
  53. {
  54. return dt;
  55. }
  56. }

Asp.Net写入读取Xml(处理文件权限)的更多相关文章

  1. asp.net写入读取xml的方法

    添加命名空间 using System.Xml; 我自己的代码(添加其中的节点) XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(Server.M ...

  2. Android中写入读取XML

    获取XML文件的基本思路是,通过getResources().getXml()获的XML原始文件,得到XmlResourceParser对象,通过该对象来判断是文档的开头还是结尾,是某个标签的开始还是 ...

  3. RSS阅读器(一)——dom4j读取xml(opml)文件

    接触java不久,偶有收获,最近想做一个web版RSS阅读器来锻炼一下.手头有几个从不同版本的foxmail中导出的opml文件,大家应该都知道,opml文件就是xml格式的.那么就先从这里入手,练习 ...

  4. ASP.NET MVC读取XML并使用ViewData显示

    看到网上一个网友问及,无法获取XML某一个节点内容.下面Insus.NET在ASP.NET MVC环境下实现它. 先把XML文件放入App_Data目录,当然你可以放在自建目录中.打开看看它有几层,几 ...

  5. asp.net core读取appsetting.json文件

    1.在Startup.cs文件中注入,ConfigureServices方法 services.Configure<MyConfig>(Configuration.GetSection(& ...

  6. 读取xml格式文件

    $v = [xml]get-content d:\vmconfig.xml $v.Domain.Computer.Name =========================== $v.GetElem ...

  7. ASP.NET写入和读取xml文件

    xml是一种可扩展标记语言,在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等.它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进 ...

  8. 读取xml文件,写入excel

    在上一篇 Python写xml文件已经将所有订单写入xml文件,这一篇我们把xml文件中的内容读出来,写入excel文件. 输入xml格式: <?xml version="1.0&qu ...

  9. C#读取xml文件写入到TreeView中

    开发过程中我们会遇到一些读取xml文件的时候,下面是我学习的整理. 用XmlDocument读取加载 XmlDocument doc = new XmlDocument(); doc.Load(&qu ...

随机推荐

  1. PHP链接mysql 出现:由于目标计算机积极拒绝,无法连接

    1.PHP链接mysql 出现:由于目标计算机积极拒绝,无法连接 2.原因是mysql服务没有启动,图标呈现红色 3.启动服务即可,打开cmd,输入net start mysql即可 4.启动后,图标 ...

  2. 如何配置Portal 基于AD的单点登录配置

    Portal for ArcGIS支持两种类型的账户,分别是: 1.系统内置账户. 2.外部系统的企业账户. 这两种不同的账号分别支持多种身份认证方式: 账号类型 认证方式 细分认证方式 系统内置账号 ...

  3. 自定义圆角ImageView控件

    这个就当工具类用吧,因为直接是继承的ImageView.所以也具备了ImageView所有的特点,不同的是,可以自动裁剪成圆角图片.看效果吧. 效果还是不错的.使用方式: 直接在配置中添加依赖 com ...

  4. ES6入门——类的概念

    1.Class的基本用法 概述 JavaScript语言的传统方式是通过构造函数,定义并生成新对象.这种写法和传统的面向对象语言差异很大,下面是一个例子: function Point(x, y) { ...

  5. qt cmake

    写在前面的话:强烈建议优先阅读Qt官网文档对cmake的使用介绍——CMake Manual 前言我去年用clion写Qt的时候,找了很多教程,也没有什么让我觉得很满意的.后来自己摸索,构建了一个我自 ...

  6. Charles基础

    一.Charles 监控其他设备连接方式 1.XP系统:控制面板——>Internet选项——>连接(tab)——>局域网(LAN)设置——>局域网设置——>代理服务器, ...

  7. vmware虚拟机挂载Windows磁盘的两种方法

    第一种 vmware虚拟机通过ntfs-3g挂接windows盘 1.共享windows盘虚拟机设置——>添加硬盘——>选择IDE——>使用物理磁盘——>选择本地盘(单分区)— ...

  8. zTree设置异步加载后展开

    //不能直接配置展开属性 因为没有数据,需要添加回调函数,异步加载成功展开 callback: { onAsyncSuccess: zTreeOnAsyncSuccess } //异步加载成功回调函数 ...

  9. KT_登录_流程图

    一.需求 关于系统登录功能,需求如下:1.登录需要输入用户名.密码2.如果连续密码输入错误4次,则自动锁定账号5分钟(也就是说5分钟之内不能再登录) 请根据以上需求,画一个登录操作流程图 二.绘图 版 ...

  10. 关于解决sql2012编辑器对象名无效问题

    出现以下情况: 解决办法: 选择“编辑”——“Intellisense”——“刷新本地缓存” 或者按Ctrl+Shift+R组合键