zoukankan      html  css  js  c++  java
  • C#读取XML文件的方法

    先写一个xml文件:

     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <bookste>
     3   <!--记录书本的信息-->
     4   <book Type="必修课" ISBN="7-111-19149-2">
     5     <title>编译原理</title>
     6     <auth>佚名</auth>
     7     <price>30.00</price>
     8   </book>
     9 
    10   <book Type="选修课" ISBN="7-111-19149-1">
    11     <title>计算机操作系统</title>
    12     <auth>test</auth>
    13     <price>28.00</price>
    14   </book>
    15 </bookste>
    View Code

    1.使用XmlDocument

          使用XmlDocument来读取XML文件.在XML文件中,我们可以把XML看作是由文档声明(Declare),元素 (Element),属性(Attribute),文本(Text)等构成的一个树.最开始的一个结点叫作根结点,每个结点都可以有自己的子结点.得到一 个结点后,可以通过一系列属性或方法得到这个结点的值或其它的一些属性.例如:

       1: xn 代表一个结点
       2: xn.Name;//这个结点的名称
       3: xn.Value;//这个结点的值
       4: xn.ChildNodes;//这个结点的所有子结点
       5: xn.ParentNode;//这个结点的父结点,等等...
     1 1.1 读取所有的数据.
     2 使用的时候,首先声明一个XmlDocument对象,然后调用Load方法,从指定的路径加载XML文件.
     3 
     4 1: XmlDocument doc = new XmlDocument();
     5 2: doc.Load(@"....Book.xml");
     6 
     7 然后可以通过调用SelectSingleNode得到指定的结点,通过GetAttribute得到具体的属性值.参看下面的代码
     8 
     9  // 得到根节点bookste
    10 
    11  XmlNode xn = xmlDoc.SelectSingleNode("bookste");
    12 
    13  // 得到根节点的所有子节点
    14 
    15  XmlNodeList xnl = xn.ChildNodes;
    16 
    17  feach (XmlNode xn1 in xnl)
    18 
    19 {
    20 
    21   BookModel bookModel = new BookModel();
    22 
    23   // 将节点转换为元素,便于得到节点的属性值
    24 
    25    XmlElement xe = (XmlElement)xn1;
    26 
    27     // 得到ISBN两个属性的属性值
    28 
    29     var isnb = xe.GetAttribute("ISBN").ToString();
    30 
    31     // 得到Book节点的所有子节点
    32 
    33    XmlNodeList xnl0 = xe.ChildNodes;
    34 
    35     var name=xnl0.Item(0).InnerText;
    36  }
    View Code
    
    

         在正常情况下,上面的代码好像没有什么问题,但是对于读取上面的XML文件,则会出错,原因就是上面的XML文件里面有注释,在没有特别说明的情况下,会默认它也是一个结点(Node).所以在把结点转换成元素的时候就会报错."无法将类型为“System.Xml.XmlComment”的对象强制转换为类型 “System.Xml.XmlElement”。"解决方法如下,和newtonsoft.json这个库类似。

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

    2.使用XmlTextReader和XmlTextWriter

    XmlTextReader和XmlTextWriter是以流的形式来读写XML文件.使用XmlTextReader读取数据的时候,首先创建一个流,然后用read()方法来不断的向下读,根据读取的结点的类型来进行相应的操作.如下:

    以后继续....

  • 相关阅读:
    数组(array)
    亲戚(relative)
    [ZJOI2016]小星星
    P4782 【模板】2-SAT 问题
    CF1065F Up and Down the Tree
    CF1065C Make It Equal
    CF1060F Shrinking Tree
    CF1060E Sergey and Subway(点分治)
    CF1060D Social Circles
    CF1060C Maximum Subrectangle
  • 原文地址:https://www.cnblogs.com/zxiong/p/4106122.html
Copyright © 2011-2022 走看看