全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C#读取XML的三种实现方式

前言

XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影。(类似还有Json)微软也提供了一系列类库来倒帮助我们在应用程序中存储XML文件

在程序中访问进而操作XML文件一般有两种模型:

DOM(文档对象模型):使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题。

流模型:流模型很好的解决了这个问题,因为它对XML文件的访问采用的是流的概念,也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能在文档中执行向后导航操作。

C#中三种读取XML文件方法如下:

1.使用 XmlDocument(DOM模式)

2.使用 XmlTextReader(流模式)

3.使用 Linq to Xml(Linq模式)

使用XmlDocument方式读取

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

xn 代表一个结点
xn.Name;//这个结点的名称
xn.Value;//这个结点的值
xn.ChildNodes;//这个结点的所有子结点
xn.ParentNode;//这个结点的父结点

读取所有数据

使用的时候,首先声明一个XmlDocument对象,然后调用Load方法,从指定的路径加载XML文件.

BookModel是图书模型

#region XmlDocument读取

public static void XmlDocumentReadDemo()
{
  //list
  List<BookModel> bookModeList = new List<BookModel>();

  //使用的时候,首先声明一个XmlDocument对象,然后调用Load方法,从指定的路径加载XML文件.
  XmlDocument doc = new XmlDocument();

  XmlReaderSettings settings = new XmlReaderSettings();
  settings.IgnoreComments = true;//忽略文档里面的注释
  using (XmlReader reader = XmlReader.Create(@"d:/demo.xml", settings))
  {
    doc.Load(reader);
    //doc.Load(@"d:/demo.xml");
    //然后可以通过调用SelectSingleNode得到指定的结点,通过GetAttribute得到具体的属性值.参看下面的代码
    // 得到根节点bookstore
    XmlNode xn = doc.SelectSingleNode("bookstore");
    // 得到根节点的所有子节点
    XmlNodeList xnl = xn.ChildNodes;

    foreach (XmlNode xn1 in xnl)
    {
      BookModel bookModel = new BookModel();
      // 将节点转换为元素,便于得到节点的属性值
      XmlElement xe = (XmlElement)xn1;
      // 得到Type和ISBN两个属性的属性值
      bookModel.BookISBN = xe.GetAttribute("ISBN").ToString();
      bookModel.BookType = xe.GetAttribute("Type").ToString();
      // 得到Book节点的所有子节点
      XmlNodeList xnl0 = xe.ChildNodes;
      bookModel.BookName = xnl0.Item(0).InnerText;
      bookModel.BookAuthor = xnl0.Item(1).InnerText;
      bookModel.BookPrice = Convert.ToDouble(xnl0.Item(2).InnerText);

      bookModeList.Add(bookModel);
    }
  }
  bookModeList.Add(new BookModel());
}

#endregion XmlDocument读取

运行结果如下:

 

 使用XmlTextReader方式读取

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

#region XmlTextReaderDemo

public static void XmlTextReaderDemo()
{
  XmlTextReader reader = new XmlTextReader(@"d:/demo.xml");
  List<BookModel> modelList = new List<BookModel>();
  BookModel model = new BookModel();
  while (reader.Read())
  {
    if (reader.NodeType == XmlNodeType.Element)
    {
      if (reader.Name == "book")
      {
        model.BookType = reader.GetAttribute("Type");
        model.BookISBN = reader.GetAttribute("ISBN");
      }
      if (reader.Name == "title")
      {
        model.BookName = reader.ReadElementContentAsString();
      }
      if (reader.Name == "author")
      {
        model.BookAuthor = reader.ReadElementString().Trim();
      }
      if (reader.Name == "price")
      {
        model.BookPrice = Convert.ToDouble(reader.ReadElementString().Trim());
      }
      //for(int i=0;i<reader.AttributeCount;i++)
      //{
      //  reader.MoveToAttribute(i);
      //}
    }

    if (reader.NodeType == XmlNodeType.EndElement)
    {
      modelList.Add(model);
      model = new BookModel();
    }
  }
  reader.Close();
  modelList.Add(new BookModel());
}

#endregion XmlTextReaderDemo

 使用 Linq to Xml读取

Linq是C#3.0中出现的一个新特性,使用它可以方便的操作许多数据源,也包括XML文件.使用Linq操作XML文件非常的方便,而且也比较简单。

必须引用using System.Linq;using System.Xml.Linq;

#region 读取所有的数据

XElement xe = XElement.Load(@"d:/demoLinq.xml");
//xe.Descendants
var elements = from ele in xe.Elements()
        select ele;
List<BookModel> modelList = new List<BookModel>();
foreach (var ele in elements)
{
  BookModel model = new BookModel();
  model.BookAuthor = ele.Element("author").Value;
  model.BookName = ele.Element("title").Value;
  model.BookPrice = Convert.ToDouble(ele.Element("price").Value);
  model.BookISBN = ele.Attribute("ISBN").Value;
  model.BookType = ele.Attribute("Type").Value;

  modelList.Add(model);
}
modelList.Add(new BookModel());

#endregion 读取所有的数据

 总结

1.XmlDocument方法优点是便于查找

2.XmlTextReader方法是流读取内存暂用少

3.Linq to Xml 最新方法也是推荐方法,代码少易于理解

源码下载:ConsoleApplication_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# c#  # 读取xml文件  # 读取xml  # 读取xml三种方式  # C#读取XML的CDATA节点内容实例详解  # C#实现XML文件读取  # c#读取XML多级子节点  # C# 创建  # 读取  # 写入XML文件  # 详解c#读取XML的实例代码  # C#中如何使用 XmlReader 读取XML文件  # C# winfrom实现读取修改xml  # 详解C#借助.NET框架中的XmlTextReader类读取XML的方法  # C#保存与读取DataTable信息到XML格式的方法  # C#读取xml节点数据方法小结  # C#从文件流读取xml文件到DataSet并显示的方法  # C#读取Excel并转化成XML的方法  # c# 读取XML文件的示例  # 文档  # 是一种  # 可以通过  # 加载  # 自己的  # 的是  # 都有  # 也有  # 很好  # 是由  # 这个问题  # 它是  # 能在  # 我们可以  # 微软  # 三种  # 它可以  # 可以使用  # 有两种  # 但它 


相关文章: 如何打造高效商业网站?建站目的决定转化率  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  如何快速上传自定义模板至建站之星?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  公司网站的制作公司,企业网站制作基本流程有哪些?  详解jQuery停止动画——stop()方法的使用  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  建站主机如何选?性能与价格怎样平衡?  如何通过远程VPS快速搭建个人网站?  如何在云主机上快速搭建网站?  如何在香港免费服务器上快速搭建网站?  如何获取开源自助建站系统免费下载链接?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  建站上市公司网站建设方案与SEO优化服务定制指南  在线制作视频网站免费,都有哪些好的动漫网站?  小型网站建站如何选择虚拟主机?  网站制作说明怎么写,简述网页设计的流程并说明原因?  c# 在高并发场景下,委托和接口调用的性能对比  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  ,想在网上投简历,哪几个网站比较好?  如何在Windows虚拟主机上快速搭建网站?  如何通过宝塔面板实现本地网站访问?  如何通过智能用户系统一键生成高效建站方案?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  实现虚拟支付需哪些建站技术支撑?  名字制作网站免费,所有小说网站的名字?  如何快速生成专业多端适配建站电话?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  如何快速搭建支持数据库操作的智能建站平台?  大连网站制作公司哪家好一点,大连买房网站哪个好?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  黑客入侵网站服务器的常见手法有哪些?  建站主机服务器选型指南与性能优化方案解析  Android滚轮选择时间控件使用详解  ,石家庄四十八中学官网?  建站之星多图banner生成与模板自定义指南  如何选择美橙互联多站合一建站方案?  建站之星安装后如何自定义网站颜色与字体?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  建站之星与建站宝盒如何选择最佳方案?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  中山网站制作网页,中山新生登记系统登记流程?  建站之星2.7模板快速切换与批量管理功能操作指南  javascript基本数据类型及类型检测常用方法小结  建站之星导航如何优化提升用户体验? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。