首页 > 编程技术 > csharp

详解C#借助.NET框架中的XmlTextReader类读取XML的方法

发布时间:2020-6-25 11:24

XmlTextReader 提供对 XML 数据流的只进只读访问。当前节点指读取器定位到的节点。使用任何读方法推进读取器并且属性反映当前节点的值。
此类实现 XmlReader 并符合 W3C 可扩展标记语言 (XML) 1.0 和“XML 中的命名空间”建议。XmlTextReader 提供以下功能:

因为 XmlTextReader 不执行数据验证所需的额外检查,所以它提供快速格式正确性分析器。

若要执行数据验证,请使用验证 XmlReader。有关更多信息,请参见 使用 XmlReader 验证 XML 数据。
若要从 XmlDocument 中读取 XML 数据,请使用 XmlNodeReader。
XmlTextReader 在发生 XML 分析错误时引发 XmlException。引发异常后,读取器的状态不可预知。例如,报告的节点类型可能不同于当前节点的实际节点类型。使用 ReadState 属性可以检查读取器是否处于错误状态。
有关 XmlReader 类的进一步论述,请参见 用 XmlReader 读取 XML。
安全注意事项:

示例:
使用XmlTextReader从头到尾阅读xml文档,比较适合大量数据读取

static void Main(string[] args) 
    { 
      XmlTextReader reader; 
 
      if (File.Exists("student.xml"))//如果文件已存在,载入文档 
      { 
        reader = new XmlTextReader("student.xml"); 
      } 
      else//否则 
      { 
        return; 
      } 
 
      int count = 0; 
      while (reader.Read())//阅读下一个 
      { 
        if (reader.Name == "student") 
        { 
          //显示读取的属性和中间文本 
          Console.WriteLine(reader.GetAttribute("id") + " " + reader.GetAttribute("age") + " " + reader.ReadString()); 
          count++; 
        } 
      } 
      reader.Close();//关闭阅读器 
      Console.WriteLine("Count is " + count); 
      Console.ReadKey(); 
    } 

201648170644727.jpg (163×134)

 
当然也可以用xmlDocument进行结构化读取,但是读取前系统会把整个文档的结构获取进来

static void Main(string[] args) 
    { 
      XmlDocument doc = new XmlDocument(); 
 
      if (File.Exists("student.xml"))//如果文件已存在,载入文档 
      { 
        doc.Load("student.xml"); 
      } 
      else//否则 
      { 
        Console.WriteLine("文档不存在!"); 
        Console.ReadKey(); 
        return; 
      } 
 
      XmlNodeList list = doc.DocumentElement.SelectNodes("student");//读取根节点的所有子节点,放到XmlNodeList中 
 
      foreach (XmlNode node in list)//从list中遍历所有节点 
      { 
        XmlElement ele = (XmlElement)node;//节点可以有中间文本但是没有属性值,所以要先转成element才能读出属性值 
        Console.WriteLine(ele.GetAttribute("id") + " " + ele.GetAttribute("age") + " " + ele.InnerText);//读取数据/显示 
      } 
 
      Console.ReadKey(); 
    } 

201648170731876.jpg (281×164)

 执行效果完全一样

标签:[!--infotagslink--]

您可能感兴趣的文章: