




已阅读5页,还剩60页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在线教务辅导网 教材其余课件及动画素材请查阅在线教务辅导网 QQ 349134187或者直接输入下面地址 第十章可扩展标记语言 学习目的 掌握XML可扩展标记语言的基本概念和使用 能够建立 显示和处理XML文档数据能够对XML数据和数据库数据进行转换 主要内容 10 1XML基本概念10 2XML文档显示10 3查询XML文档10 4编辑XML文档10 5XML架构10 6数据库和XML 10 1XML基本概念 XML是基于文本的标记语言 它通过有意义的标签以结构化的格式存储数据 能够描述矢量图形 数学公式 化学符号等数据 这种格式可以被任何一种计算机系统所解释 XML描述数据的另一优点是数据和显示数据的格式分离 10 1 1SGML 标准通用标记语言 SGML StandardGeneralizedMarkupLanguage 是一种通用的文档结构描述标记语言 为文档数据的标记提供了异常强大的工具 同时具有极好的扩展性 因此在数据分类和索引中非常有用 但SGML复杂度太高 不适合网络的日常应用 加上开发成本高 不被主流浏览器所支持等原因 使得SGML推广受到阻碍 10 1 2XML 可扩展标记语言 XML eXtensibleMarkupLanguage 是由W3C于1998年2月发布的标准 它是SGML的一个简化子集 它具有SGML的丰富功能 同时易于使用 XML优点如下 XML简单易用 功能强大 XML允许各个组织 个人建立适合自己需要的标记集合 并且这些标记可以用通用的工具显示 XML的最大优点在于它的数据存储格式不受显示格式的制约 通过有意义的标签以结构化的格式存储数据 用一种开放的自我描述方式定义数据结构 XML还有其他许多优点 比如它有利于不同系统之间的信息交流 完全可以充当网际语言 并有希望成为数据和文档交换的标准 10 1 3XML的文档格式 首先介绍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 DocumentTypeDefine 文档类型定义 和XSD XMLSchema 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 4XPath表示XML文档路径 10 2XML文档显示 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 2XML文件转换为HTML文件 例10 4 本例将e10 3 xml文件 按照e10 3 xsl定义的显示格式生成HTML文件e10 4 htm 建立新项目 在window1 xaml cs文件头部增加引用如下命名空间语句 usingSystem Xml usingSystem Xml Xsl 增加一个按钮 其事件函数如下 用浏览器IE显示e10 4 html效果和例12 3相同 privatevoidbutton1 Click objectsender RoutedEventArgse XslCompiledTransformxslt newXslCompiledTransform xslt Load E 应用程序设计教程 第二版 Example ch10 e10 4 XML文件转换为HTML文件 e10 3 xsl xslt Transform E 应用程序设计教程 第二版 Example ch10 e10 4 XML文件转换为HTML文件 e10 3 xml e10 4 html 10 2 3TreeView控件和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 1XmlTextReader类查询XMLXmlTextReader类可以读取XML文件 但只提供非缓存的只进 只读访问 这意味着使用XmlTextReader无法编辑属性值或元素内容 也无法插入和移除节点 例10 9 本例用来读出e10 1 xml文件中每个学生的姓名 性别和年龄等数据 使用XmlTextReader类读XML文档各种元素只能顺序读出 在Window1 xaml cs文件头部增加引用命名空间语句 usingSystem Xml 在Window1窗体放置ListBox控件 Name属性为listBox1 在Window1类构造函数最后增加如下语句 XmlTextReaderdr newXmlTextReader e10 1 xml xml文件和可执行文件在同一目录while dr Read if dr NodeType XmlNodeType Text listBox1 Items Add dr Value XML文档的节点分为两大类 第一类是文本节点 即XML文档的数据 在两个标记之间的文本被称为一个文本节点 第二类是非数据节点 它又可以分为以下几大类 注释节点声明节点开始标记节点结束标记节点 例10 10 本例用来读出e10 1 xml文件学生标记的编号属性 修改上例代码如下 XmlTextReaderdr newXmlTextReader e10 1 xml while dr Read if dr NodeType XmlNodeType Element 判断是否为开始标记for inti 0 i dr AttributeCount i listBox1 Items Add dr GetAttribute i 例10 11 如果显示e10 1 xml文档注释 修改上例代码如下 XmlTextReaderdr newXmlTextReader e10 1 xml while dr Read if dr NodeType XmlNodeType Comment e10 1 xml文档无注释listBox1 Items Add dr Value 例10 12 如果显示e10 1 xml文档声明 修改上例代码如下 XmlTextReaderdr newXmlTextReader e10 1 xml while dr Read if dr NodeType XmlNodeType XmlDeclaration listBox1 Items Add dr Name dr Value 10 3 2XmlDocument类查询XML XmlDocument是文档对象模型 DOM 类 是XML文档在内存中表示形式 DOM使程序员能够以编程方式读取 操作和修改XML文档 DOM的节点的概念和上节叙述的概念完全相同 因此也可以使用类似XmlTextReader类的方法读出XML文档的数据和非数据节点 下边仅给出读出XML文档的数据的例子 读XML文档中的非数据节点请读者完成 例10 13 使用XML文档对象模型 DOM 读出e10 1 xml文件中每个学生的姓名 性别和年龄等数据 修改例10 9代码如下 XmlDocumentdoc newXmlDocument 创建XmlDocument类的实例doc Load e10 1 xml xml文件和可执行文件在同一目录 读XML文件到内存 形成DOM结构XmlNodeReaderdr newXmlNodeReader doc while dr Read if dr NodeType XmlNodeType Text listBox1 Items Add dr Value 例10 14 本例显示XML文件e10 1 xml的所有学生姓名 修改例10 9代码如下 XmlDocumentdoc newXmlDocument doc Load e10 1 xml 下句得到XML文档中 姓名 节点放到节点数组中XmlNodeListelemList doc GetElementsByTagName 姓名 for inti 0 i elemList Count i listBox1 Items Add elemList i InnerXml 例10 15 本例用XPath语言查询实现例10 13相同功能 修改例10 9代码如下 XmlDocumentdoc newXmlDocument doc Load e10 1 xml XmlNodeListnodes doc SelectNodes 学生列表 学生 所有学生元素foreach XmlNodenodeinnodes 分别取出每个学生元素 for inti 0 i 下条语句参数i 0的值是姓名的值 i 1的值是性别的值 i 2的值是年龄的值listBox1 Items Add node ChildNodes i FirstChild Value 例10 16 本例用XPath语言查询实现例10 14相同功能 修改例10 9代码如下 XmlDocumentdoc newXmlDocument doc Load e10 1 xml XmlNodeListnodes doc SelectNodes 学生 姓名 foreach XmlNodenodeinnodes listBox1 Items Add node FirstChild Value 例10 17 用XPath语言查询编号 002的学生姓名 修改例10 9代码如下 XmlDocumentdoc newXmlDocument doc Load e10 1 xml XmlNodenode doc SelectSingleNode 学生 contains 编号 002 此句也正确XmlNodenode doc SelectSingleNode 学生 编号 002 listBox1 Items Add node ChildNodes 0 FirstChild Value 10 3 3XPathNavigator类查询XML XPathNavigator类和XmlDocument类的工作方式类似 在内存中处理XML文档 允许移动节点 关键的区别是XPathNavigator采用游标方式 使用MoveToNext 之类的方法向前或向后移动节点 一般从XmlDocument类对象导出XPathNavigator类对象 例10 18 用XPathNavigator类读出e10 1 xml文件中每个学生的编号 姓名 性别和年龄等数据 修改例10 9 添加引用命名空间语句 usingSystem Xml XPath 增加一个方法如下 voidgetAllText XPathNavigatorxnav if xnav NodeType XPathNodeType Text listBox1 Items Add xnav Value if xnav HasAttributes xnav MoveToFirstAttribute do listBox1 Items Add xnav Value while xnav MoveToNextAttribute xnav MoveToParent if xnav HasChildren xnav MoveToFirstChild do getAllText xnav while xnav MoveToNext xnav MoveToParent 删除原在Window1构造函数中代码 增加代码如下 XmlDocumentdoc newXmlDocument doc Load e10 1 xml XPathNavigatorxnav doc CreateNavigator getAllText xnav 10 3 4XDocument和LINQtoXML 为了实现LINQtoXML Net3 5引入了System Xml Linq命名空间 在该命名空间中 引入了若干类用来操作XML文档 包括用XDocument类代表整个XML文档 用XElement类代表XML文档中某个元素 用XAttribute类代表XML文档节点属性 用XComment类代表XML文档注释 用XDeclaration类代表XML文档声明 用XName类代表XML命名空间 使用这些类 采用不同于XMLDocument类的方式 能够更快捷方便地操作XML文档 下边用例子说明LINQtoXML用法 例10 19 本例查找e10 1 xml所有学生的姓名 修改例10 9代码如下 XElementxDoc XElement Load e10 1 xml varAllName fromaNameinxDoc Descendants 姓名 selectaName Value foreach varnameinAllName listBox1 Items Add name ToString 例10 20 本例查找e10 1 xml编号为001的学生姓名 上例LINQ语句修改如下 varAllName fromaNameinxDoc Descendants 学生 where string aName Attribute 编号 001 selectaName Element 姓名 Value 例10 21 如果查找e12 18 xml所有女学生的姓名 上例LINQ语句修改如下 varAllName fromaNameinxDoc Descendants 学生 where string aName Element 性别 女 selectaName Element 姓名 Value 10 4编辑XML文档 10 4 1XmlTextWriter类写XML文档XmlTextWriter类提供了快速 非缓存 只进方法生成XML文档的方法 可以生成包含XML数据的流或文件 该类属性Formatting为Formatting None 表示不使用特殊的格式设置XML文档 这是默认选项 如果为Formatting Indented 表示使子元素根据Indentation和IndentChar设置缩进 例10 22 本例用XmlTextWriter类生成一个XML文档 建立新项目 增加引用命名空间语句 usingSystem Xml 在窗体增加一个按钮 按纽单击事件函数如下 privatevoidbutton1 Click objectsender RoutedEventArgse System IO FileStreammyFileStream newSystem IO FileStream e10 22 xml System IO FileMode Create XmlTextWriterwriter newXmlTextWriter myFileStream System Text Encoding Unicode writer Formatting Formatting Indented writer WriteStartElement 学生 writer WriteAttributeString 编号 001 writer WriteElementString 姓名 张三 writer WriteElementString 性别 男 writer WriteElementString 年龄 20 writer WriteEndElement writer Close 用程序写出的XML文档的书局格式如下 张三男20 10 4 2XmlDocument类编辑XML文档 XmlDocument类使程序员能够以编程方式创建 编辑和删除XML文档内容 例10 23 用XmlDocument类创建一个XML文档 修改例10 22按钮事件函数如下 privatevoidbutton1 Click objectsender RoutedEventArgse XmlDocumentdoc newXmlDocument doc LoadXml 小布头历险记 doc Save e10 23 xml 例10 24 为例10 23创建的e10 23 xml文件增加一个新节点 修改例10 22 首先将e10 23 xml文件拷贝到生成的可执行文件所在文件夹 修改例10 22按钮事件函数如下 privatevoidbutton1 Click objectsender RoutedEventArgse XmlDocumentdoc newXmlDocument doc Load e10 23 xml XmlNoderoot doc DocumentElement XmlElementelem doc CreateElement 价格 elem InnerText 19 95 root AppendChild elem doc Save e10 24 xml 例10 25 为例10 23创建的e10 23 xml文件增加一个新属性 修改例10 24 首先将e10 23 xml文件拷贝到生成的可执行文件所在文件加 修改例10 24按钮事件函数如下 privatevoidbutton1 Click objectsender RoutedEventArgse XmlDocumentdoc newXmlDocument doc Load e10 23 xml XmlAttributenewAttr doc CreateAttribute 类别 newAttr Value 小说 XmlAttributeCollectionattrColl doc DocumentElement Attributes attrColl Append newAttr doc Save e10 25 xml 例10 26 查找e10 1 xml文档指定节点 修改该节点数据 修改例10 24 首先将e10 1 xml文件拷贝到生成的可执行文件所在文件加 修改例10 24按钮事件函数如下 privatevoidbutton1 Click objectsender RoutedEventArgse XmlDocumentdoc newXmlDocument doc Load e10 1 xml XmlNodestudent XmlNoderoot doc DocumentElement student root SelectSingleNode descendant 学生 姓名 张三 student 年龄 InnerText 22 doc Save e10 26 xml 10 4 3XDocument编辑XML文档 例10 27 本例用语句生成和XML文件e10 1 xml相同的XML文件e10 27 xml 创建新项目 增加如下命名空间 usingSystem Xml usingSystem Xml Linq 放置Button控件到窗体 其属性Content 用程序写XML文件 其事件函数如下 privatevoidbutton1 Click objectsender RoutedEventArgse XDocumentxDoc newXDocument newXDeclaration 1 0 GB2312 yes newXComment 这是一个注释 newXElement 学生列表 newXElement 学生 newXAttribute 编号 001 newXElement 姓名 张三 newXElement 性别 男 newXElement 年龄 20 newXElement 学生 newXAttribute 编号 002 newXElement 姓名 李四 newXElement 性别 女 newXElement 年龄 19 xDoc Save e10 27 xml 编译运行后 单击按钮 创建XML文件e10 27 xml 可用IE浏览器查看该文件 例10 28 本例为XML文件e10 27 xml增加一个学生节点 修改上例 修改按纽控件标题为 增加学生节点 其事件函数如下 privatevoidbutton1 Click objectsender RoutedEventArgse XElementxDoc XElement Load e10 27 xml 该文件必须和可执行文件在同一文件夹XElementxel newXElement 学生 newXAttribute 编号 003 newXElement 姓名 王五 newXElement 性别 女 newXElement 年龄 21 xDoc Add xel xDoc Save s 例10 29 本例删除编号为001的学生 修改例12 28 Button控件属性Text 删除编号为003学生 其事件函数如下 privatevoidbutton1 Click objectsender RoutedEventArgse XElementxDoc XElement Load e10 28 xml varAllName fromaNameinxDoc Descendants 学生 where string aName Attribute 编号 003 selectaName foreach varnameinAllName name RemoveAll xDoc Save e10 29 xml 例10 30 本例修改编号为001的学生的年龄 修改上例 Button控件属性Text 修改学生的年龄 其事件函数如下 privatevoidbutton1 Click objectsender RoutedEventArgse XElementxDoc XElement Load e10 27 xml varAllName fromaNameinxDoc Descendants 学生 where string aName Attribute 编号 001 selectaName foreach varnameinAllName name Element 年龄 Value 18 xDoc Save e10 30 xml 10 5XML架构 XML文件可用DTD DocumentTypeDefine 文档类型定义 和XSD XMLSchema XML架构 来描述其数据结构 10 5 1DTD或XMLSchema定义XML架构 DTD DocumentTypeDefinition文档类型定义 是SGML语言的组成部分 可以用来定义XML文档的数据结构和组成的元素类型 可以看作一个或多个XML文档的模板 使用DTD可以对一个XML文档的结构进行校验 它可以是一个独立文件 也可以直接放在XML文档中 例如 例10 1中的XML文件e10 1 xml的DTD文件如下 10 5 2用XMLSchema验证XML架构 一个XML文档首先应当是格式良好的 为了验证格式的正确性 可以使用XMLSchema XML架构 XSD 对一个XML文档进行验证 例10 31 用VS2008打开e10 1 xml 选择主菜单 XML X 创建架构 C 菜单项 为XML文件e10 1 xml建立架构文件e10 1 xsd 然后运行本程序进行验证 1 创建新项目 在Window1 xaml cs文件头部增加如下命名空间 usingSystem Xml usingSystem IO usingSystem Xml Schema 2 在窗体增加一个TextBlock和Button控件 Button控件事件函数如下 privatevoidbutton1 Click objectsender RoutedEventArgse XmlSchemaSetsc newXmlSchemaSet sc Add null e10 1 xsd XmlReaderSettingssettings newXmlReaderSettings settings ValidationType ValidationType Schema settings Schemas sc XmlReaderreader XmlReader Create e10 1 xml settings try while reader Read textB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乐理初级考试题及答案
- 课件显示全屏快捷键
- 课件时间显示问题
- 冷却筛分工培训考核试卷及答案
- 酒类分级考试题及答案
- 2025年教师招聘之《幼儿教师招聘》通关试题库及答案详解(历年真题)
- 教师招聘之《幼儿教师招聘》通关考试题库附参考答案详解(研优卷)
- 甘油水处理工质量管控考核试卷及答案
- 金箔制作工突发故障应对考核试卷及答案
- 采购员设备调试考核试卷及答案
- 龙虎山正一日诵早晚课
- 米粉及杂粮类制品课件
- 楔形平板产生的等厚干涉
- 骨髓腔穿刺在急诊急救中的应用课件
- 机械动力学PPT完整全套教学课件
- 年产2.03万吨高端精细化学品及5G新材料项目环评报告书
- 群众文化副高答辩问题及答案
- GB/T 41972-2022铸铁件铸造缺陷分类及命名
- 主编-孙晓岭组织行为学-课件
- 中医刮痧法诊疗操作评分标准
- 《师范生教师职业能力证书》样式及说明
评论
0/150
提交评论