剖析XML(第一讲)

  自从XML(可扩展标记语言) 在20世纪90年代后期登上舞台后,它就一直是众多活动和狂热思索的焦点.XML只是基于普通文本,但却提供了几乎可以再任何两个应用程序间共享数据的方式,无聊他们是新的还是旧的,是否使用不同的语言编写,是不由不同的公司构建,甚至是否运行在不同的操作系统上。

  什么时候要使用xml

   几乎在做的每一位都会这样的问题,下列几个场景中可以考虑使用它

  1.你需要处理已经保存在xml中的数据时。当你必须和一个现存的使用了特定xml的应用程序交换数据时,就会发生这种情况.

  2.你希望用xml保存数据并为未来可能的整合做好准备时,因为使用了xml,你知道将来可使第三方应用程序读取这些数据。

  3.你希望使用依赖于xml的技术时。例如,web服务使用各种建立在xml上的标准。

  xml在应用程序整合的场景中最有意义.不过,也没有理由说你不可以使用xml格式保存你的专有数据。这么做可以获得一些便利,如可以使用.net类从文件中读取xml数据。当保存复杂、高度结构化的数据时,使用这些类带来的便利是非常显著,它远高于你自行设计文件格式并编写自己的文件解析逻辑所带来的便利,它还让其他开发人员更方便地理解、重用或改进你创建的系统.

  提示:开发人必须理解的一个最重要的概要是,存储数据时必须决定两件事情---确定数据结构或的方式(逻辑格式)和确定数据保存的方式(数据的物理存储)。xml是格式的选择而不是存储的选择,也就是说,如果你决定使用xml格式保存数据,你还要决定xml是要保存到数据库字段里,还是要插入到一个文件里,或者只是以字符串或其他对象的形式保存在内存中。

  xml简介:简而言之,xml规范是有w3c(world wide web consortium)定义的一组指南,用于以纯文本的形式描述格式化数据。和html类似,xml是一种基于尖括号间标签的标记语言。和HTML一样,xml的文本本质使得数据具有高度便携并易于发布。此外,你可以用任何标准的文本编辑器创建和编辑xml文档。

  和HTML不同的是,xml没有一组固定的标签。相反,xml是一种可用于创建其他标记语言的元语言。换句话说,xml建立用于命名和元素排列的简单规则,它允许你用自定义的元素创建自己的数据格式。

  提示:基于xml语言的一个显著应用时XHTML,它是HTML的现代版。从本质上说,XHTML是基于XML的语言,它通过将文本分成节、标题、段落和列表来表明文档结构。

  XML的优点

  1.适应性。xml无处不在。很多公司采用XML保存数据或正在积极考虑使用它。无论什么时候只要想共享数据,xml都会自动成为他们的第一个(经常也是唯一一个)考查的对象

  2.扩展性和灵活性。和EDI(电子数据交换)不同,xml不会强加任何数据语义的规则,也不会把公司强行绑定到某一个专用网络。这样,xml适用于任何类型的数据并且实现的代价很低。

  3.相关标准和工具。xml成功的另一个原因在于帮助创建和处理xml文档的工具(如解析器)和相关标准(如xml架构、XPath和XSLT)。这样,几乎每种语言的开发人员都有现成的组件用于阅读xml、验证xml是否有效、按某种规则(被称作架构)验证xml的有效性、搜索xml以及把xml从一种格式转换为另一种格式。

  格式良好的xml

  xml是一个非常严格的标准。这种严格是用于保留广泛的兼容性的。如果xml的规则不严格,就会很难区分无害的不一致和严重的错误。更糟的是,不同的xml解析器对一些错误的处理方式可能不同,这就会导致处理的不一致(或者甚至它根本不能处理)正是这些缺陷影响了一种不上基于xml的臭名昭著的语言--HTML

  为了避免这类问题,所有的xml解析器都会执行一些基本的质量检查。如果一个xml文档不能满足所有标准,他就会彻底拒绝。如果xml文档遵循这些规则,它就被称为是格式良好的。格式良好的xml不一定就是正确的xml--例如:它还有可以包括错误的数据

  xml文档必须满足羡慕这些条件才能被认为是格式良好的

    1.每个开始标签必须有一个结束标签。

    2.空元素必须以“/>”结束

    3.元素不能够交错但可以嵌套。换句话说,<person><firstName></firstName></person>是有效,但<person><firstName></person></firstName>是无效的

    4.元素和特性必须使用一致的大小写。例如:<FristName></fristName>是无效的

    5.一个元素不能够哟两个特性同名,因为这样没有办法区分它们。不过,一个元素可以包含两个同名的嵌套元素。

    6.一个文档只可以有一个根元素(根元素师以文档开始并包含了文档中所以元素的顶层元素)

    7.所有特性在值的前后都要有引号。

    8.注释不能写放在标签中(xml注释与HTML注释有相同的格式,它们包含在<!--和-->标记中

前面说了那么多,不管咱们学什么东西,都是为了以后能用到自己的项目中,从现在开始就是开始讲解怎么在.NET Framework中应用xml

  一.基于流的xml处理

  .NET Framework 允许你使用System.Xml命名空间(以及其他以System.XML开头的命名空间)中的一组类来操作xml数据。除了这些,读写xml最常用的方法是使用两个基于流的类:XmlTextReader和XmlTextWriter。

  1.写xml文件

  .NET Framework通过两种方式把xml数据写入文件

    1)可以再内存中使用XmlDocument或XDocument类创建文档,结束时把它写入文件。

    2)用XmlTextWriter直接把文档写入流。这在你写数据的时候会逐个节点输出数据。

  如果在创建XML文档后还要对它进行其他操作,如搜索、转换、验证,那么在内存中构建XML文档就是很好的选择。它还是用非线性方式写xml文档的唯一方式,因为它允许你在任意地方插入新节点。不过XmlTextWriter为直接写入文件提供了更为简单、性能更好的模型,因为它不是离开就把整个文档保存到内存中

  提示:可以使用XmlDocument、XDocument和XmlTextWriter类创建不保存在文件内的XML数据。因为这3个类都允许你把信息写入任意的流。使用这些技术,你可以创建一个xml文档,然后把它插入到其他存储位置,如数据库表中个的文本类型的字段

  

View Code
 1  protected void Page_Load(object sender, EventArgs e)
 2     {
 3         if (!IsPostBack) {
 4             WriteXML();
 5         }
 6     }
 7     /// <summary>
 8     /// 这个示例创建一个表示DVD列表的XML文档其中包含的信息有每个DVD的标题,导演,单价以及演员列表
 9     /// </summary>
10     private void WriteXML()
11     {
12         #region 基本操作
13         string xmlFile = Server.MapPath("DvdList.xml");//最终存储的路径
14         XmlTextWriter writer = new XmlTextWriter(xmlFile, null);
15         writer.Formatting = Formatting.Indented;//添加缩进
16         writer.Indentation = 3;
17         writer.WriteStartDocument();//写入版本1.0的xml声明(<?xml version="1.0"?>)
18         writer.WriteComment("Created @" + DateTime.Now.ToString());//添加注释
19 
20         #endregion
21         #region 开始写入数据
22         writer.WriteStartElement("DvdList");//创建父元素(必须先行创建)
23         writer.WriteStartElement("DVD");//创建子节点
24         writer.WriteAttributeString("id", "1");//给子节点加属性
25         writer.WriteAttributeString("Category", "Science Fiction");
26         writer.WriteElementString("Title", "The Matrix");
27         writer.WriteElementString("Director", "Larry Wachowski");
28         writer.WriteElementString("Price", "18.74");
29 
30         writer.WriteStartElement("Starring");
31         writer.WriteElementString("Star","Keanu Reeves");
32         writer.WriteElementString("Star","Laurence Fishburne");
33         #endregion
34         #region 以相反的顺序关闭所有打开的标签
35         //关闭Starring 
36         writer.WriteEndElement();
37         //关闭DVD
38         writer.WriteEndElement();
39         //关闭writer
40         writer.Close();
41         #endregion
42     }

 最终效果:

  

今天先讲到这里,下次再讲读取xml文件和内存中处理xml

----------这里的重点是我总结ASP.NET 4.0高级程序设计(第4版)中的内容,只为收藏和学习

 

 

posted on 2012-06-26 16:44  水行者  阅读(347)  评论(0编辑  收藏  举报

导航