资源预览内容
第1页 / 共64页
第2页 / 共64页
第3页 / 共64页
第4页 / 共64页
第5页 / 共64页
第6页 / 共64页
第7页 / 共64页
第8页 / 共64页
第9页 / 共64页
第10页 / 共64页
亲,该文档总共64页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第十章 可扩展标记语言,学习目的,掌握XML可扩展标记语言的基本概念和使用。 能够建立、显示和处理XML文档数据 能够对XML数据和数据库数据进行转换,主要内容,10.1 XML基本概念 10.2 XML文档显示 10.3 查询XML文档 10.4 编辑XML文档 10.5 XML架构 10.6 数据库和XML,10.1 XML基本概念,XML是基于文本的标记语言,它通过有意义的标签以结构化的格式存储数据,能够描述矢量图形、数学公式、化学符号等数据,这种格式可以被任何一种计算机系统所解释。XML描述数据的另一优点是数据和显示数据的格式分离。,10.1.1 SGML(标准通用标记语言),SGML(Standard Generalized Markup Language)是一种通用的文档结构描述标记语言,为文档数据的标记提供了异常强大的工具,同时具有极好的扩展性,因此在数据分类和索引中非常有用。但SGML复杂度太高,不适合网络的日常应用,加上开发成本高、不被主流浏览器所支持等原因,使得SGML推广受到阻碍。,10.1.2 XML(可扩展标记语言),XML(eXtensible Markup Language)是由W3C于1998年2月发布的标准,它是SGML的一个简化子集,它具有SGML的丰富功能,同时易于使用。XML优点如下: XML简单易用,功能强大。 XML允许各个组织、个人建立适合自己需要的标记集合,并且这些标记可以用通用的工具显示。 XML的最大优点在于它的数据存储格式不受显示格式的制约。 通过有意义的标签以结构化的格式存储数据,用一种开放的自我描述方式定义数据结构。 XML还有其他许多优点,比如它有利于不同系统之间的信息交流,完全可以充当网际语言,并有希望成为数据和文档交换的标准。,10.1.3 XML的文档格式,首先介绍XML文档内容的基本单元元素,它的语法格式如下: 标签文本内容/标签 元素是由起始标签、元素内容和结束标签组成。用户把要描述的数据对象放在起始标签和结束标签之间。例如:王平。无论文本内容有多长或者多么复杂,XML元素中可以再嵌套别的元素,这样使相关信息构成等级结构。用这样的方法定义XML文档数据和数据结构。,【例10.1】下面的例子是一个描述学生情况的XML文档,用IE浏览器(5.0以上版本)浏览e10_1.xml文件,效果如图10.1。完整XML文件e10_1.xml内容如下: 张三 男 20 李四 女 19 ,XML文档中出现的有效对象是: 声明:声明给XML解析器提供信息,使其能够正确解释文档内容,它的起始标识是“。 注释:注释是XML文件中用作解释的字符数据,XML处理器不对它们进行任何处理。注释文本被“标记,注释可以出现在XML元素间的任何地方,但是不可以嵌套。 根元素和子元素:如果一个元素从文件头的序言部分之后开始,一直到文件尾,包含了文件中所有的数据信息,称为根元素。XML元素是可嵌套的,那么被嵌套在内的元素称为子元素。一个XML文档中有且仅有一个根元素,其他所有的元素都是它的子元素。 属性:属性给元素提供进一步的说明信息,它必须出现在起始标签中。属性以名称/值成对出现,属性名不能重复,名称与取值之间用等号分隔,取值用引号括起来。,XML文档的基本结构:XML文档的基本结构由序言部分和一个根元素组成。序言包括了XML声明和DTD或XSD声明,DTD(Document Type Define,文档类型定义)和XSD(XML Schema,XML架构)都是用来描述XML文档的数据结构的(参见10.5节)。例如,在例10.1的XML文件e10_1.xml文档前面加上如下的序言部分,就构成了一个完整的XML文档: ,格式良好的(Well-Formed)XML文档:一个XML文档首先应当是格式良好的,格式良好XML文档的正式定义位于:http:/www.w3.org/TR/REC-xml。格式良好的XML文档除了要满足根元素惟一的特性之外,还包括: (1)起始标签和结束标签应当匹配,结束标签是必不可少的。 (2)大小写应一致,XML对字母的大小写是敏感的,和是完全不同的两个标签,所以结束标签在匹配时一定要注意大小写一致。 (3)元素应当正确嵌套,子元素应当完全包括在父辈元素中,下面例子就是错误嵌套: ,正确的嵌套方式如下: 。 (4)属性值必须包括在引号中,元素中的属性名是不允许重复的。,10.1.4 XPath表示XML文档路径,10.2 XML文档显示,XML文件可用IE浏览器显示,由于XML文档仅定义数据及其数据结构,并不包含显示格式,如不另定义显示格式,显示效果类似图10.1。如希望IE按指定格式显示这些数据,必须使用CSS文件或XSL文件定义显示格式。WPF应用程序可使用数据绑定方法显示XML文件。,10.2.1 定义XML文档显示格式,【例10.2】用一个xsl文件e10_2.xsl定义e10_1.xml显示格式。xsl文件如下: , , , ,【例10.3】html标记是用来描述网页的数据和显示格式。在xsl文件中可以使用html标记,上例中逗号和标记都是html标记,另一个xsl文件e10_3.xsl以表格的形式显示e10_1.xml文件。e10_3.xsl文件如下: 编号 姓名 性别 年龄 ,10.2.2 XML文件转换为HTML文件,【例10.4】本例将e10_3.xml文件,按照e10_3.xsl定义的显示格式生成HTML文件e10_4.htm。建立新项目,在window1.xaml.cs文件头部增加引用如下命名空间语句: using System.Xml; using System.Xml.Xsl; 增加一个按钮,其事件函数如下。用浏览器IE显示e10_4.html效果和例12.3相同。 private void button1_Click(object sender, RoutedEventArgs e) XslCompiledTransform xslt = new XslCompiledTransform(); xslt.Load(“E:应用程序设计教程(第二版)Examplech10e10_4 XML文件转换为HTML文件e10_3.xsl“); xslt.Transform(“E:应用程序设计教程(第二版)Examplech10 e10_4XML文件转换为HTML文件e10_3.xml“, “e10_4.html“); ,10.2.3 TreeView控件和Xml数据绑定,【例10.5】本例使用ListView控件显示例e10_1的xml文档。创建新项目。单击“项目|添加现有项“菜单项,将e10_1.xml文件增加到项目中。用如下标记替换Window1.xaml文件中Grid标记。 ,【例10.6】本例在XAML标记中定义XML文档,用ListView控件显示这个XML文档。 张三 李四 王五 ,【例10.7】本例使用TreeView控件显示学生学号和姓名。在Grid标记中填入如下标记。 张三 李四 王五 XML文档只有一个根元素,根元素中还可以嵌入子元素,子元素还可以有子元素,因此XML文档具有层次结构,因此也可以使用TreeView控件显示。为了显示XML文档,必须使用HierarchicalDataTemplate类为TreeView控件每一节点定义模板。,【例10.8】本例说明如何将TreeView控件绑定到例10.1中的XML文档。标记如下: , 张三 李四 王五 ,10.3 查询XML文档,查询XML文档是指读取或查找XML文档指定数据或标记。可使用XmlTextReader、XmlDocument、XPathNavigator和XDocument类实现查询。 10.3.1 XmlTextReader类查询XML XmlTextReader类可以读取XML文件,但只提供非缓存的只进、只读访问。这意味着使用XmlTextReader无法编辑属性值或元素内容,也无法插入和移除节点。,【例10.9】本例用来读出e10_1.xml文件中每个学生的姓名、性别和年龄等数据。使用XmlTextReader类读XML文档各种元素只能顺序读出。在Window1.xaml.cs文件头部增加引用命名空间语句: using System.Xml; 在Window1窗体放置ListBox控件,Name属性为listBox1,在Window1类构造函数最后增加如下语句。 XmlTextReader dr= new XmlTextReader(“e10_1.xml“); /xml文件和可执行文件在同一目录 while(dr.Read() if(dr.NodeType=XmlNodeType.Text) listBox1.Items.Add(dr.Value);,XML文档的节点分为两大类, 第一类是文本节点,即XML文档的数据。在两个标记之间的文本被称为一个文本节点。 第二类是非数据节点,它又可以分为以下几大类: 注释节点 声明节点 开始标记节点 结束标记节点,【例10.10】本例用来读出e10_1.xml文件学生标记的编号属性。修改上例代码如下: XmlTextReader dr= new XmlTextReader(“e10_1.xml“); while(dr.Read() if(dr.NodeType=XmlNodeType.Element) /判断是否为开始标记 for(int i=0;idr.AttributeCount;i+) listBox1.Items.Add(dr.GetAttribute(i);,【例10.11】如果显示e10_1.xml文档注释,修改上例代码如下: XmlTextReader dr= new XmlTextReader(“e10_1.xml“); while(dr.Read() if(dr.NodeType=XmlNodeType.Comment) /e10_1.xml文档无注释 listBox1.Items.Add(dr.Value);,【例10.12】如果显示e10_1.xml文档声明,修改上例代码如下: XmlTextReader dr= new XmlTextReader(“e10_1.xml“); while(dr.Read() if(dr.NodeType=XmlNodeType.XmlDeclaration) listBox1.Items.Add(dr.Name+“ “+dr.Value);,10.3.2 XmlDocument类查询XML,XmlDocument是文档对象模型(DOM)类,是XML文档在内存中表示形式。DOM使程序员能够以编程方式读取、操作和修改XML文档。DOM的节点的概念和上节叙述的概念完全相同,因此也可以使用类似XmlTextReader类的方法读出XML文档的数据和非数据节点。下边仅给出读出XML文档的数据的例子,读XML文档中的非数据节点请读者完成。,【例10.13】使用XML文档对象模型(DOM) 读出e10_1.xml文件中每个学生的姓名、性别和年龄等数据。修改例10.9代码如下: XmlDocument doc = new XmlDocument(); /创建XmlDocument类的实例 doc.Load(“e10_1.xml“); /xml文件和可执行文件在同一目录。读XML文件到内存,形成DOM结构 XmlNodeReader dr=new XmlNodeReader(doc); while(dr.Read() if(dr.NodeType=XmlNodeType.Text) listBox1.Items.Add(dr.Value);,【例10.14】本例显示XML文件e10_1.xml的所有学生姓名。修改例10.9代码如下:
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号