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

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

(0)

相关推荐

  • 操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP)

    而昨晚在使用 XPATH 的时候, 遇到一个问题, 改了一个晚上才搞定, 差点没吐血. 果然基础知识要掌握扎实啊!! 假设有以下一份 XML 文档: 我们要获取所有歌曲的标题, 一般是使用以下的 XPATH 表达式: 复制代码 代码如下: /playlist/trackList/track/title 但是匹配的结果会让你非常失望, 你会发现什么也得不到. 于是我在这个问题上卡了好几个小时, 最终万能的 Google 告诉了我答案. 在第二行 playlist 那个节点, 有一个 XMLNS 属

  • C#通过XML节点属性/属性值读取写入XML操作代码实例

    1.XML的内容如下: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8" ?><root>  <title>    <settings id = "0" name = "显示文字">欢迎您!智慧服务,互动体验......</settings>    <settings id = "1" name

  • C# XML操作 代码大全(读XML,写XML,更新,删除节点,与dataset结合等)第1/2页

    已知有一个XML文件(bookstore.xml)如下: Corets, Eva 5.95 1.插入节点 往节点中插入一个节点: 复制代码 代码如下: XmlDocument xmlDoc=new XmlDocument(); xmlDoc.Load("bookstore.xml"); XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找 XmlElement xe1=xmlDoc.CreateElement(

  • C#读取xml节点数据方法小结

    本文实例总结了C#读取xml节点数据的方法.分享给大家供大家参考.具体如下: 第一种: 使用XPath XML的路径我配置在web.config 的appSettings节点下 <appSettings> <add key="orgCodePath" value="../../template/home/orgCode.xml"/> </appSettings> XML结构如下: <?xml version="1.

  • C#读取XML中元素和属性值的实现代码

    1.school.xml,如下: 复制代码 代码如下: <?xml version="1.0" encoding="UTF-8"?><!--启明培训学校学生信息:    1.一年级学生    2.二年级学生    -->  <school name="启明培训学校">    <grades>     <grade id="1" name="一年级">

  • C#生成XML的三种途径小结

    1.我认为是最原始,最基本的一种:利用XmlDocument向一个XML文件里写节点,然后再利用XmlDocument保存文件.     首先加载要写入的XML文件,但是如果没有的,就要新建,在新建的过程中,要有写入的代码:   复制代码 代码如下: XmlDocument doc = new XmlDocument();            try            {                doc.Load("new.xml");            }      

  • C#针对xml基本操作及保存配置文件应用实例

    本文实例讲述了C#针对xml的基本操作及保存配置文件应用,分享给大家供大家参考.具体方法如下: 引言:这里首先介绍了xml的基本操作,后面写了一个经常用到的xml保存配置文件的实例. xml常用方法: 定义xml文档:XmlDocument xmlDoc = new XmlDocument(); 初始化xml文档:xmlDoc.Load("D:\\book.xml");//找到xml文件 创建根元素:XmlElement xmlElement = xmlDoc.CreateElemen

  • C# 写入XML文档三种方法详细介绍

    我在以前的博客中介绍了如何使用XmlDocument类对XML进行操作,以及如何使用LINQ to XML对XML进行操作.它们分别使用了XmlDocument类和XDocument类.在本文中,我再介绍一个类,XmlTextWriter.我们分别用这三个类将同样的xml内容写入文档,看一看哪种写法最直观.简便. 我们要写入的XML文档内容为 复制代码 代码如下: <?xml version="1.0" encoding="UTF-8"?> <Co

  • C#对XML文件的各种操作实现方法

    XML:Extensible Markup Language(可扩展标记语言)的缩写,是用来定义其它语言的一种元语言,其前身是SGML(Standard Generalized Markup Language,标准通用标记语言).它没有标签集(tag set),也没有语法规则(grammatical rule),但是它有句法规则(syntax rule).任何XML文档对任何类型的应用以及正确的解析都必须是良构的(well-formed),即每一个打开的标签都必须有匹配的结束标签,不得含有次序颠

  • 简介C#读取XML的两种方式

    XML作用 对于XML,想必各位都比较了解,我也就不用费笔墨来描述它是什么了,我想在未来的Web开发中XML一定会大放异彩,XML是可扩展标记语言,使用它企业可以制定一套自己的数据格式.用于Internet的数据传输,我想,这是XML对于我们这些程序员最诱人的地方! 我们今天的主题不是论述XML的好处,而是讨论在C#中如何使用XML.下面我们来了解一下使用程序访问XML的一些基础理论知识. 访问的两种模型: 在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,

随机推荐