首页 > ASP.NET > The NOTE of learning ASP.NET [14] 使用.NET Framework中System.Xml命名空间下的类读写XML文件

The NOTE of learning ASP.NET [14] 使用.NET Framework中System.Xml命名空间下的类读写XML文件

     .NET中对XML读写进行了很好的支持,在.NET Framework中Xml命名空间下提供了很多类来对XML文件进行读写等操作。在需要读写XML文件时时我们可以在代码顶部输入using System.Xml 来告诉编译器和运行时环境我们需要使用此命名空间下的类。
     首先回顾下关于XML的基本信息:
     1.XML 全称 Extensible Makeup Language 扩展标记语言,可以用来存储格式化的数据。
     2.XML 是基于(elements)元素的
     3.element由开始标记,元素内容以及结束标记组成。
     4.元素的属性可以存储当前标签的信息。

      以下是XML示例代码片段,这里我们存储了关于章节的信息,我们存储了两个章节,并存储了他们的标题:           
         <chapters total="2">
                <chapter>Data Types, Variables and Operators</chapter>
                <chapter>Language Fundamentals</chapter>
         </chapters>
        
 了解.Net Framework中XML读写相关的类:
     1.XmlWriter类 我们使用这个类把XML写入文件或者内存中,它的常用方法及属性如下:
        Create方法 创建一个新的实例,调用时传入XML文件的名称作为参数。
        WriteStartDocument方法 输出XML的定义头:类似 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
        WriteStartElement方法 输出元素开始部分,就是上边XML示例中的<chapters total="2">这行。
        WriteEndElement 方法  输出元素结束部分  </chapters>
        WriteElementString方法 一次性输出包括元素开始部分,元素内容和元素结束部分。可以一次性输出后面的内容,<chapter>Language Fundamentals</chapter>

    2.XmlWriterSettings类 我们使用这个类来设置我们写入XML的一些格式信息。
       Indent属性 可以设置为true或者false 来设置当我们写入XML的元素时,元素是否使用缩进。
       IndentChars属性 可以定义我们使用缩进时使用的分隔符。
       NewLineChars属性 定义我们写入元素时换行使用的字符。

    3.XmlReader类 我们使用这个类来读取文件或内存中的XML文件,它的常用方法及属性如下:
      Create方法 创建一个新的XML文件引用实例,调用时传入XML文件的名称作为参数。
      Read方法 一次读取一个元素的节点,返回true或者false
      NodeType属性 判断当前Read方法读取的标记节点类型,是element还是文本。
      ReadToFollowing方法 传递一个我们要查找的element名称作为参数,    和Read方法基本一样,只是我们这里是要找寻特定名称的element

示例代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml;
 
namespace UsingNetFramework
{
  class Program
  {
    static void Main(string[] args)
    {
            static void WriteAndReadXML()  // 这里只定义了一个静态方法,执行下面的代码块
           {

                   // 首先new一个XmlWriterSettings类的实例,起个名字叫settings,用来定义使用XmlWriter类来输出XML的格式设置。
                   XmlWriterSettings settings = new XmlWriterSettings();

                   // 设置settings对象的Indent属性为true,这样在使用XmlWriter输出XML时会自动使用缩进
                   // 如果这里设置成false则输出的XML文件会没有任何换行缩进等格式
                   settings.Indent = true; 
                  
                   // 设置换行字符
                   settings.NewLineChars = "rn";

                   // 通过调用XmlWriter类的静态方法Create来新建一个写XML文件的writer对象,如果文件已经存在会覆盖他里面的内容。
                   // 调用这个方法传进了两个参数,第一个是字符串型,为我们要创建的文件的名称,包括要存放的位置的全路径。
                   // 第二个参数是我们在上边创建的settings对象,这样可以让writer使用我们定义好的格式来输出XML。
                   XmlWriter writer = XmlWriter.Create("c:\test.xml", settings);
 
                   writer.WriteStartDocument(true); //输出XML的定义头:类似 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
                   writer.WriteStartElement("chapters"); //输出chapters元素的开始标签<chapters>
                   // 下面一行代码为上一行代码输出的chapters元素添加一个属性,这样我们实际看到的效果应该是<chapters total="2">
                   writer.WriteAttributeString("total", "2"); 

                   // 下面一行代码一次输出了一个完整的元素,一次性输出包括元素开始部分,元素内容和元素结束部分。
                   // 输出效果所示:<chapter>Data Types, Variables and Operators</chapter>
                   writer.WriteElementString( "chapter", "Data Types, Variables and Operators");
                   writer.WriteElementString( "chapter", "Language Fundamentals");
                  
                   // 输出chatpers元素的结束部分</chapters>
                   writer.WriteEndElement();

                   // 结束我们的输出,文件在我们使用Create方法时已经在硬盘中生成,但是只有当我们调用了Close方法后以上内容才会真正输出到文本文件中。
                   writer.Close();
                   
                   /// 上面的部门示例了写XML的一般方法,下面则是读取XML的一般方法
                   // 读取XML文件我们使用XmlReader类,首先也需要使用XmlReader的Create方法来新建一个XmlReader的对象,
                   // 这实际上是我们XML文件的一个引用,方法的参数为我们要读取文件的名称包括其全路径。
                   XmlReader reader = XmlReader.Create("c,:\test.xml");        ///"c:\test.xml"中的\是使用了转义字符
 
                  // Read the XML one node at a time
                  // 这里使用了一个while循环,如果reader对象的Read方法返回true,说明我们读取到了XML文件中的节点信息
                  // 返回false的时候说明我们已经读取完所有信息。可以这么理解,使用一次Read方法如果读到数据,即把当前读到的节点
                  // 数据保存到reader对象中,然后我们就可以调用reader对象的属性来读取当前读到的节点的信息。
                  while (reader.Read())
                  {
                        if (reader.NodeType == XmlNodeType.Text)
                       {
                            Console.WriteLine(reader.Value);
                       }
                   }

                   // 当我们读取完毕需要使用Close方法来关闭这个读取流。
                   reader.Close();
 
                   Console.WriteLine();

                   // 上面演示了XmlReader的Read方法,下面是XmlReader类的ReadToFollowing方法的示例
                   // 同样需要使用XmlReader的Create方法来新建一个XmlReader的对象,可能有人会问为什么上面已经新建了一个
                   // XmlReader的对象,而这里不能直接使用呢。这是因为无论是使用Read方法还是ReadToFollowing方法,读取
                   // XML的顺序都是从上到下而不能回到顶部重新读取的。所以每次需要重新读取XML文件都需要新建一个XmlReader类的对象。
                   reader = XmlReader.Create("c:\test.xml");
                   
                   // 区别于Read方法依次读取XML的每个节点信息,ReadToFollowing方法可以读取特定名称的节点的信息
                   // 这里选择只读取元素名称为chapter的元素节点。
                   while (reader.ReadToFollowing("chapter"))
                   {
                          // 读到一个元素节点后我们可以使用它的信息进行操作,这里输出了这个元素的内容
                          Console.WriteLine(reader.ReadInnerXml());
                   }
                    
                   // 关闭读取流
                   reader.Close();
               }
        }
     }
  }

Advertisements
分类:ASP.NET
  1. 还没有评论。
  1. No trackbacks yet.

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: