详解c#读取XML的实例代码

2019-12-30 15:24:36刘景俊

在正常情况下,上面的代码好像没有什么问题,但是对于读取上面的XML文件,则会出错,原因就是因为我上面的XML文件里面有注释,大家可以参看Book.xml文件中的第三行,我随便加的一句注释.注释也是一种结点类型,在没有特别说明的情况下,会默认它也是一个结点(Node).所以在把结点转换成元素的时候就会报错."无法将类型为“System.Xml.XmlComment”的对象强制转换为类型“System.Xml.XmlElement”。"

c#读取xml文件,c#,读取xml文件,读取xml文件内容

幸亏它里面自带了解决办法,那就是在读取的时候,告诉编译器让它忽略掉里面的注释信息.修改如下:


XmlDocument xmlDoc = new XmlDocument();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;//忽略文档里面的注释
XmlReader reader = XmlReader.Create(@"....Book.xml", settings);
xmlDoc.Load(reader);

最后读取完毕后,记得要关掉reader.


 reader.Close();

这样它就不会出现错误.

最后运行结果如下:

c#读取xml文件,c#,读取xml文件,读取xml文件内容

1.2 增加一本书的信息.

向文件中添加新的数据的时候,首先也是通过XmlDocument加载整个文档,然后通过调用SelectSingleNode方法获得根结点,通过CreateElement方法创建元素,用CreateAttribute创建属性,用AppendChild把当前结点挂接在其它结点上,用SetAttributeNode设置结点的属性.具体

加载文件并选出要结点:


XmlDocument doc = new XmlDocument();
doc.Load(@"....Book.xml");
XmlNode root = doc.SelectSingleNode("bookstore");

创建一个结点,并设置结点的属性:


  XmlElement xelKey = doc.CreateElement("book");
   XmlAttribute xelType = doc.CreateAttribute("Type");
   xelType.InnerText = "adfdsf";
   xelKey.SetAttributeNode(xelType);

创建子结点:


  XmlElement xelAuthor = doc.CreateElement("author");
   xelAuthor.InnerText = "dfdsa";
   xelKey.AppendChild(xelAuthor);

最后把book结点挂接在要结点上,并保存整个文件:


root.AppendChild(xelKey);
doc.Save(@"....Book.xml");

用上面的方法,是向已有的文件上追加数据,如果想覆盖原有的所有数据,可以更改一下,使用LoadXml方法:


  XmlDocument doc = new XmlDocument();
   doc.LoadXml("<bookstore></bookstore>");//用这句话,会把以前的数据全部覆盖掉,只有你增加的数据