(课件教案)-第二十章-可扩展标记语言(xml).ppt

上传人(卖家):晟晟文业 文档编号:4998676 上传时间:2023-02-01 格式:PPT 页数:135 大小:1.03MB
下载 相关 举报
(课件教案)-第二十章-可扩展标记语言(xml).ppt_第1页
第1页 / 共135页
(课件教案)-第二十章-可扩展标记语言(xml).ppt_第2页
第2页 / 共135页
(课件教案)-第二十章-可扩展标记语言(xml).ppt_第3页
第3页 / 共135页
(课件教案)-第二十章-可扩展标记语言(xml).ppt_第4页
第4页 / 共135页
(课件教案)-第二十章-可扩展标记语言(xml).ppt_第5页
第5页 / 共135页
点击查看更多>>
资源描述

1、第二十章 可扩展标记语言(XML)本章的学习内容包括六个方面:1 学会使用 XML 标记数据。2 理解 XML 命名空间的概念。3 理解 DTD、架构和 XML 的关系。4 学会创建架构。5 学会创建和使用简单的 XSLT 文档。6 学会使用使用 XslTransform 类将 XML 文档转换成 XHTML。20.1 概述可扩展标记语言(Extensuble Markup Language,XML)于 1996 年由万维网协会(W3C)下属的“XML 工作组”开发的。XML 是可移植的、获得普遍支持的开放(非专利性)技术,可以用于对数据进行描述。XML 正在快速成为程序的数据交换标准。使用

2、XML,文档作者可描述任何类型数据,包括数学公式、软件配置指南、乐谱、菜谱以及财务报表。无论人或机器,都能方便阅读 XML 文档。.NET Framework 广泛运用了 XML。Framework 类库(FCL)提供了和 XML 有关的一系列类。Visual C+.NET 的许多内部实现也利用了 XML。Visual C+.NET 还配备了一个 XML 编译器和校验器。20.2XML 文档本节将通过两个简单的 XML 文档,介绍 XML 文档的组成。第一个 XML 文档描述了一篇文章。注意,为了叙述方便,我们下面的 XML 文档增加了行号(行号不是 XML 文档的内容)。1 23 4 56

3、78 Simle XML910 August 6,200311910 August 6,20031112 13 Su14 Fari15 1617 XML is pretty easy.1819 In this chapter,we present a wide variety of examples20that use XML.21 22 23 分析该 XML 文档是由以下几部分组成的:1 文档的第1行是一个可选的“XML 声明”,它将该文档标识成一个 XML 文档。虽然 XML 声明是可选的,但最好保留;如果不能确切地遵循正确的 XML 版本,会导致不可预测的错误。2 注解行是以 结尾的,几

4、乎可以放在文挡的任何地方。例如:3 使用“标记”(Tag)来标记数据。标记名称要封闭在一对尖括号。标记必须成对使用,以便对字符数据进行定界。例如:Simle XML。注意,结束标记与起始标记的区别仅在于,在字符 之后有一个正斜杠字符。例如文档中的 和 等。4 独立的标记单元(即包括在起始标记和结束标记之间的一切内容)成为“元素”。XML 文档总体上只由一个元素构成,即“根元素”,其中包含了文档中的其他所有元素。根元素必须是 XML 声明之后的第一个元素。例如,本例的 aticle。不同元素可以嵌套,从而形成一个层次结构 根元素位于层次结构的最顶部。这样能使文档的作者在数据之间明确建立关系。例如

5、,title,date,author,summary 和 content 元素都嵌套在 article 内。而 firstName 和 lastName 都嵌套在 author 内。注意,在 XML 文档中创建多个根元素是语法错误。另外,XML 要区分大小写。切记不要将元素名的大小写弄混。为了处理 XML 文档,需要一个“XML 解析器”。该解析器负责检查 XML 文档的语法,并使 XML 文档的数据能由应用程序使用。流行的解析器包括微软的 MSXML、Apache 软件基金会的 Xerces 以及 IBM 的 XML4J 等等。本章使用的是 MSXML。在 IE 中打开 XML 文档后,MS

6、XML 会解析文档,并将解析过的数据传送给 IE。然后,IE 使用一个内建的“样式表”格式化数据。注意下图中的最终数据格式与 XML 文档的原始格式非常相似。正如后面要展示的,为了将 XML 数据转换成合适显示的格式,样式表充当了至关重要的角色。下面展示的是第二个 XML 文档,它标记了一封商务信函。该文档包含了比上一个 XML 文档更多的数据。1 23 4 56 7 8 Jane Doe9 Box 1234510 15 Any Ave.11 Othertown12 Otherstate13 6789014 555-432115 16 1718 19 John Doe20 123 Main S

7、t.21 22 Anytown23 Anystate24 1234525 555-123426 27 2829 Dear Sir:3031 It is our privilege to inform you about our new 32 database managed with XML.This 33 new system allows you to reduce the load on 34 you inventory list server by having the client machine 35 perform the work of sorting and filterin

8、g the data.36 3738 Please visit our Web site for availablity39 and pricing.40 4142 Sincerely4344 Ms.Doe45 根元素 letter(第 645 行)包含子元素 contact(第 716 行和第 1827 行)、salutation(第 29 行)、paragraph(第 3136 行和第 3840 行)、closing(第 42 行)以及 signature(第 44 行)。数据除了能放到标记之间,还可以放到“属性”(attributes)中。所谓属性是指起始标记中的“名称-值”对(名称和值

9、用一个等号“=”来分隔)。每个元素都可在其起始标记中指定任意数量的属性。第一个 contact 元素指定了 type 属性,属性值是“from”,表明该 contact 元素标记了与发信人有关的信息。第二个 contact 元素也指定了 type 属性,属性值是“to”,表明该 contact 元素标记了与收信人有关的信息。和标记名一样,属性名也要区分大小写;可为任意长度;可采用字母、数字、下划线、连字号和句号;但必须以字母或下划线字符开头。salutation 元素标记了信函问候语。paragraph 元素标记了信函正文。closing 和 signature 元素则分别标记了信函作者的结语

10、和签名。注意,属性值必须用双引号(“”)或单引号()来封闭,否则就是语法错误。不能为一个元素指定两个同名属性。本文档的第 15 行引入了名为 flag 的一个“空元素”,它指出联系人的性别。所谓空元素是指不包含字符数据(也就是说,起始和结束标记之间没有文本)的元素。要结束这样的元素,要么在元素末尾插入一个正斜杠,如本文的;要么显式写一个结束标记,例如:。注意,第 21 行的 address2 元素也不包含数据。所以可以将第 21 行安全地修改成。然而,完全省略元素可能不是明智之举,因为某些 DTD(文档类型定义)或者架构需要用到它。这些问题的详细内容将在后面的有关节中讨论。20.3XML 命名

11、空间与.NET Framework 的结构相似,XML 也使用了“命名空间”对 XML 元素进行区分。此外,对于一些基于 XML 的语言(称为“词汇表”),比如,XML 架构语言和可扩展样式表语言等,它们也常常用命名空间来标识自己的元素。元素根据“命名空间前缀”来区分,它标识一个元素从属于哪个命名空间。例如:Visual C+.NET用命名空间前缀 deitel 来限定 book 元素,表明 book 元素是 deitel 空间的一部分。除了保留的命名空间前缀 xml 之外,文档作者可将任何名称作为命名空间前缀使用。注意,以任何大小写组合形式创建名为 xml 的命名空间前缀都是语法错误。下面的

12、 XML 文档中包含了两个 file 元素,它们通过命名空间加以区分。1 23 4 56 89 10 A book list11 1213 14 A funny picture15 16 17 18 注意,属性无需用命名空间前缀加以限定,因为它们肯定与元素联系在一起。第 67 行用 xmlns 属性创建了两个命名空间前缀 text 和 image。每个命名空间前缀都和一系列字符绑定,这些字符构成了“统一资源标识符”(URI)。URI 惟一性地标识了命名空间。文档作者可创建自己的命名空间及 URI。注意,我们是在创建前缀的同一行上使用 text 命名空间前缀。为了确保命名空间的唯一性,作者必须提

13、供不重复的 URI。本例将 urn:deitel:textInfo 和 urn:deitel:imageInfo 作为 URI 使用。一种常见的做法是将 URL 作为 URI 使用。因为 URL 中的域名()肯定是不重复的。例如,第 67 行可以改写成:6 这个例子使用了与 Deitel&Associates 公司域名对应的 URL 来标识命名空间。XML 解析器其实永远不会访问这些 URL 它们只是一系列以示区别的字符。这些 URL 不需要引用实际的网页,甚至不需要具有正确的形式。第 911 行用命名空间前缀 text 来限定元素 file 和 description,表示它们从属于“urn

14、:deitel:textInfo”命名空间。注意,命名空间前缀也要应用于结束标记。第 1316 行将命名空间前缀 text 应用于 file、description 和 size 元素。要想避免为每个标记名都附加命名空间前缀,作者可以指定一个“默认命名空间”。下面的文档演示了默认命名空间。1 23 4 56 89 10 A book list11 1213 14 A funny picture15 16 17 18 默认命名空间应用于 directory 元素以及没有使用命名空间前缀限定的所有元素。但是,也可使用一个命名空间前缀,为特定元素指定一个不同的命名空间。例如,第 13 行为 file

15、 元素附加了 image 前缀,表明它在 urn:deitel:imageInfo 命名空间中而不是在默认命名空间中。20.4 文档对象模型虽然 XML 文档是文本文件,但通过顺序文件访问技术从中获取数据,显得既不实际,效率也不够好,尤其是在需要动态添加或删除数据的时候。一个 XML 文档被成功解析后,解析器会将文档数据按照树结构存储到内存中。下面我们以 article.xml 文档为例讨论文档的树结构。这个层次化的树结构称为“文档对象模型”(Document Object Model,)树,能够创建这类结构的 XML 解析器被称之为“DOM 解析器”。DOM 树将 XML 文档的每个组件(比

16、如 article,date,firstName 等等)表示成树上的一个节点。包含了其他节点的一个节点(如 author)称为“父节点”。具有同一父的节点(比如 firstName 和 lastName)称为“同辈节点”(Sibling Node)。节点的“后辈节点”(Descendant Node)包括:节点的子节点、子节点的子节点类似地,节点的“前辈节点”(Ancestor Node)包括:节点的父节点、父节点的父节点 每个 DOM 树都只有一个“根节点”,它包含了其他所有节点、比如注解和元素。用于创建、读取和操纵 XML 文档的类型定义在 System:Xml 命域空间中。该空间还包含其

17、他命域空间,提供了与 XML 文档有关的其他类。article.xml 文档的 DOM 树如下所示:接下来,本节要展示使用 DOM 树的几个程序实例。articletitledateauthorsummarycontentfirstNamelastName实例1 XmlReaderTest 加载了本章第一个 XML 文档 article.xml,并在一个文本框中按照 DOM 树层次结构显示其中的数据。在该实例中通过创建 XML 文档类型 XmlDocument 的对象,并调用 XmlDocument 类型的方法 Load 将 article.xml 加载到对象中,以便程序读取和处理该 XML

18、文档的数据。读取 XmlDocument 类型对象所加载的数据是由 XmlNodeReader 类型(抽象类型 XmlReader 的派生类)对象通过 Read 方法完成的。本程序只对读取的数据进行类型(元素、注解还是文本)判断。用于判断的数据类型依据是由枚举类型 XmlNodeType 提供的。上述的类型和枚举同属于 System:Xml 命域空间中。为了显示 XmlDocument 类型对象中加载的 XML 文档数据,需要在程序的主窗体中添加一个文本框 TextBox 控件。程序的 GUI 设计如下:编程要点1 由于程序中需要使用 XmlDocument、XmlNodeReader 类型和

19、枚举类型 XmlNodeType,因此程序中需要添加使用这些类型所在的命域空间的语句:using namespace System:Xml;2 在主窗体 Form1 类型中添加一个方法 PrintXml,实现按树形结构显示指定 XML 文件中信息的设计需求。代码如下:void PrintXml()/create and load XML documentXmlDocument document=gcnew XmlDocument();document-Load(Larticle.xml);/create XmlNodeReader for documentXmlNodeReader reade

20、r=gcnew XmlNodeReader(document);/show form before outputTextBox is populatedthis-Show();/tree depth is-1,no indentationint depth=-1;/display each nodes contentwhile(reader-Read()switch(reader-NodeType)/if Element,display its name case XmlNodeType:Element:/increase tab depthdepth+;TabOutput(depth);ou

21、tputTextBox-AppendText(String:Concat(LName,Lrn);/if empty element,decrease depthif(reader-IsEmptyElement)depth-;break;/if Comment,display it case XmlNodeType:Comment:TabOutput(depth);outputTextBox-AppendText(String:Concat(LValue,L-rn);break;/if Text,display it case XmlNodeType:Text:TabOutput(depth);

22、outputTextBox-AppendText(String:Concat(Lt,reader-Value,Lrn);break;/if XML declaration,display it case XmlNodeType:XmlDeclaration:TabOutput(depth);outputTextBox-AppendText(String:Concat(LName,L,reader-Value,L?rn);break;/if EndElement,display it and decrement depth case XmlNodeType:EndElement:TabOutpu

23、t(depth);outputTextBox-AppendText(String:Concat(LName,Lrn);depth-;break;/end switch /end while/end method PrintXml其中辅助方法 TabOutput 用于在输出的文本中加入 Tab 转移字符,以便表示文本信息的层次关系。代码如下:void TabOutput(int number)for(int i=0;i AppendText(Lt);/end method TabOutput3 在 Form1 的构造函数中添加调用 PrintXml 方法的语句:Form1(void)Initia

24、lizeComponent();PrintXml();4 添加主窗体大小变化事件的处理方法 Form1_SizeChanged,以便在主窗体大小发生变化时,文本框控件的大小依据主窗体的大小发生相应的变化。代码如下:System:Void Form1_SizeChanged(System:Object sender,System:EventArgs e)outputTextBox-Size=this-Size;实例的运行结果如下:实例2 XmlDOM 演示了如何通过程序来操纵 DOM 树。该程序首先将 XML 文件 letter.xml 加载到一个 XmlDocument 类型对象中,然后依据

25、XML 数据的 DOM 树层次结构,将 XmlDocument 类型对象中的数据复制到另一个 XmlDocument 类型对象中,并在复制操作的同时创建一个树形视图显示中数据的树形结构关系。程序还允许将复制得到的 XmlDocument 类型对象中的数据以非树形结构格式的文本显示,同时将这些数据写到一个新建的 XML 文件中。程序的 GUI 设计如下:其中添加的三个按钮(Button)控件、一个树形视图(TreeView)控件和一个文本框控件(TextBox)的用途如下:控件标题控件对象名用途BuildbuildButton发出复制源 XML 文件对象到目标 XML 文件对象,并创建显示数据的

26、树形视图的命令事件。PrintprintButton发出将目标 XML 文件对象中数据以非树形格式显示,并写入新建 XML 文件的命令事件。ResetresetButton发出清除树形视图和文本框中数据文本,清空目标 XML 文件对象中数据的命令事件。xmlTreeView树形格式显示源 XML 文件对象中的数据。consoleTextBox 非树形格式显示源 XML 文件对象中的数据。编程要点1 由于程序中需要使用 XmlDocument、XmlNodeReader、XmlNode、XmlNodeWriter、TempFileCollection 类型和枚举 XmlNodeType,因此程序

27、中需要添加使用这些类型所在的命域空间的语句:using namespace System:Xml;using namespace System:CodeDom:Compiler;2 在主窗体 Form1 中除了需要添加与界面控件关联的控件类型对象外,还需要添加相关的数据成员:用于装载 XML 源文件的 XmlDocument 类型数据成员:private:XmlDocument source。用于保存 XML 目标文件的 XmlDocument 类型数据成员:private:XmlDocument copy。用于构造树形视图节点的 TreeNode 类型数据成员:private:TreeNod

28、e copy。3 在 Form1 的构造函数中添加初始化数据成员的代码:Form1(void)InitializeComponent();/create XmlDocument and load letter.xmlsource=gcnew XmlDocument();source-Load(Lletter.xml);/initialize pointer to 0copy=nullptr;tree=nullptr;4 单击 Build 按钮事件的处理方法 buildButton_Click。代码如下:System:Void buildButton_Click(System:Object se

29、nder,System:EventArgs e)/determine if copy has been built alreadyif(copy!=nullptr)return;/document already exists/instantiate XmlDocument and TreeNodecopy=gcnew XmlDocument();tree=gcnew TreeNode();/add root node name to TreeNode and add TreeNode to/TreeView controltree-Text=source-Name;/assign#rootx

30、mlTreeView-Nodes-Add(tree);/build node and tree hierarchyBuildTree(source,copy,tree);printButton-Enabled=true;resetButton-Enabled=true;/end method buildButton_Click其中调用的辅助方法 BuildTree 用于复制 XML 数据和显示数据创建树形视图。代码如下:void BuildTree(XmlNode xmlSourceNode,XmlNode document,TreeNode treeNode)/create XmlNodeR

31、eader to access XML documentXmlNodeReader nodeReader=gcnew XmlNodeReader(xmlSourceNode);/represents current node in DOM treeXmlNode currentNode=nullptr;/treeNode to add to existing treeTreeNode newNode=gcnew TreeNode();/points to modified node type for createNodeXmlNodeType modifiedNodeType;while(no

32、deReader-Read()/get current node type modifiedNodeType=nodeReader-NodeType;/check for EndElement,store as Element if(modifiedNodeType=XmlNodeType:EndElement)modifiedNodeType=XmlNodeType:Element;/create node copy currentNode=copy-CreateNode(modifiedNodeType,nodeReader-Name,nodeReader-NamespaceURI);/b

33、uild tree based on node type switch(nodeReader-NodeType)/if Text node,add its value to tree case XmlNodeType:Text:newNode-Text=nodeReader-Value;treeNode-Nodes-Add(newNode);/append Text node value to currentNode datadynamic_cast(currentNode)-AppendData(nodeReader-Value);document-AppendChild(currentNo

34、de);break;/if EndElement,move up tree case XmlNodeType:EndElement:document=document-ParentNode;treeNode=treeNode-Parent;break;/if new element,add name and traverse tree case XmlNodeType:Element:/determine if element contains contentif(!nodeReader-IsEmptyElement)/assign node text,add newNode as child

35、newNode-Text=nodeReader-Name;treeNode-Nodes-Add(newNode);/set treeNode to last childtreeNode=newNode;document-AppendChild(currentNode);document=document-LastChild;/end if/do not traverse empty elementselse/assign NodeType string to newNodenewNode-Text=(System:Object)nodeReader-NodeType)-ToString();t

36、reeNode-Nodes-Add(newNode);document-AppendChild(currentNode);/end elsebreak;/all other types,display node type default:newNode-Text=(System:Object)nodeReader-NodeType)-ToString();treeNode-Nodes-Add(newNode);document-AppendChild(currentNode);break;/end switch newNode=gcnew TreeNode();/end while/updat

37、e the TreeView controlxmlTreeView-ExpandAll();xmlTreeView-Refresh();/end method BuildTree5 单击 Print 按钮事件的处理方法 printButton_Click。代码如下:System:Void printButton_Click(System:Object sender,System:EventArgs e)/exit if copy does not point to an XmlDocumentif(copy=nullptr)return;/create temporary XML fileTe

38、mpFileCollection file=gcnew TempFileCollection();/create file that is deleted at program terminationString filename=file-AddExtension(Lxml,false);/write XML data to diskXmlTextWriter writer=gcnew XmlTextWriter(filename,System:Text:Encoding:UTF8);copy-WriteTo(writer);writer-Close();/parse and load te

39、mporary XML documentXmlTextReader reader=gcnew XmlTextReader(filename);/read,format and display datawhile(reader-Read()if(reader-NodeType=XmlNodeType:EndElement)consoleTextBox-AppendText(L/);if(reader-Name!=String:Empty)consoleTextBox-AppendText(String:Concat(reader-Name,Lrn);if(reader-Value!=String

40、:Empty)consoleTextBox-AppendText(String:Concat(reader-Value,Lrn);/end whilereader-Close();/end method printButton_Click6 单击 Reset 按钮事件的处理方法 resetButton_Click。代码如下:System:Void resetButton_Click(System:Object sender,System:EventArgs e)/remove TreeView nodesif(tree!=nullptr)xmlTreeView-Nodes-Remove(tre

41、e);xmlTreeView-Refresh();/force TreeView update/delete XmlDocument and treecopy=nullptr;tree=nullptr;consoleTextBox-Text=L;/clear text boxprintButton-Enabled=false;resetButton-Enabled=false;/end method resetButton_Click程序的执行结果如下:单击 Build 按钮后,程序的执行状态:单击 Print 按钮后,程序的执行状态:虽然 XmlNodeReader 类的基类 XmlRead

42、er 包含了读取和修改节点值的方法,但在 DOM 树中定位数据时,它并不是最有效的方式。System:Xml:XPath 命名空间中提供的 XPathNavigator 类能遍历符合搜索条件的节点列表。搜索条件是一个“XPath 表达式”。XPath 提供了一种语言(XML Path Language,XML 路径语言),能在 XML 文档中快速、高效地定位特定节点。XPath 是一种基于字符串的表达式语言,供 XML 及其许多相关技术使用。实例3 PathNavigator 演示了如何使用 XPathNavigator 在 XML 文档中导航。与实例2 一样,程序使用了一个 TreeView

43、 控件和多个 TreeNode 对象来显示 XML 文档结构。两实例的不同之处为:本例在树形视图只显示与当前导航状态相关的部分 DOM 树。XPathNavigator 每次定位到一个新节点时,都会更新 TreeNode 节点列表,并依据更新后的节点列表,在 TreeView 控件中添加或删除节点,以反映 XPathNavigator 在 DOM 树中的当前位置。本例中使用的 XML 文档 sports.xml 如下所示:1 23 4 56 78 9 Cricket1011 12 More popular among Commonwealth nations.13 14 1516 17 Bas

44、eball1819 20 More popular in America.21 22 2324 25 Soccer(Football)2627 Most popular sport in the world2829 30为了便于使用者使用导航功能浏览 XML 文本数据,本例中,主窗体的 GUI 设计如下:其中所添加的控件的用途,按照从上至下的顺序列在下表中:控件标题控件对象名用途Location ElementlocationBox包含所有定位控件的组框SelectselectButton发出显示 DOM 树中选定节点的全部信息的命令事件selectCombBox 选择 DOM 树中指定节点的

45、定位描述selectTreeViewer 显示 DOM 树中选定节点的全部信息Navigation ControlsnavigateBox包含所有导航浏览控件的组框PreviousprviousButton发出向前导航浏览的命令事件ParantparantButton发出导航浏览父节点的命令事件First ChildfirstChildButton发出导航浏览第一子节点的命令事件NextnextButton发出向后导航浏览的命令事件pathTreeViwer显示当前导航浏览到的树形结构信息注意,表中用于选择 DOM 树中指定节点的定位描述的组合下拉表框(ComboBox)控件 selectCo

46、mboBox 中表项的添加方法:静态初始化如果表项的数量和内容可以预先确定,则一般在添加该控件时,通过初始化 Items 属性,将表项文本添加到组合下拉表框中。本例中就是将可以预先确定的的 7 条表项:sportssportsgamesportsgamenamesportsgameparagraphsportsgamename=Cricketsportsgamename=Baseballsportsgamename=Soccer(Football)通过静态添加到组合下拉表框中的。操作方法如下图所示:动态添加组合下拉表框(ComboBox)类型还提供了添加表项的方法:首先通过 ComboBox

47、类型对象的属性 Item 获取存放表项的集合 ComboBox.ObjectCollection 类型对象;然后,便可以调用 ComboBox.ObjectCollection 类提供的方法:int Add(Object item);向组合下拉表框添加参数指定的表项。void Add(array items);向组合下拉表框添加参数指定的多个表项。void Clear();清除组合下拉表框中的所有表项。编程要点1 由于程序中需要使用 XPathDocument、XPathNavigator 等类型,因此程序中需要添加使用这些类型所在的命域空间的语句:using namespace System

48、:Xml;using namespace System:Xml:XPath;2 在主窗体 Form1 中除了需要添加与界面控件关联的控件类型对象外,还需要添加相关的数据成员:用于装载 XML 文件的 XPathDocument 类型数据成员:private:XPathDocument document。用于导航浏览 document 中的 XML 数据的 XPathNavigator 类 型数据成员:private:XPathNavigator xpath。用于构造树形视图的 TreeNode 类型数据成员:private:TreeNode tree。3 在 Form1 的构造函数中添加初始化

49、数据成员的代码:Form1(void)InitializeComponent();/load in XML documentdocument=gcnew XPathDocument(Lsports.xml);/create navigatorxpath=document-CreateNavigator();/create root node for TreeNodestree=gcnew TreeNode();tree-Text=(System:Object)xpath-NodeType)-ToString();/#rootpathTreeViewer-Nodes-Add(tree);/upd

50、ate TreeView controlpathTreeViewer-ExpandAll();pathTreeViewer-Refresh();pathTreeViewer-SelectedNode=tree;/highlight root4 单击 First Child、Parant、Next 或 Previous 按钮的事件处理方法用于在 document 装载的 XML 文件数据中,使用 xpath 进行四种不同的导航浏览。这四个事件处理方法的代码如下:System:Void firstChildButton_Click(System:Object sender,System:Event

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文((课件教案)-第二十章-可扩展标记语言(xml).ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|