




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、11.1 XML概述11.2 XML语法11.3 根标记与特殊字符11.4 显示XML11.5 用Servlet和JSP动态生成XML11第11章 XML简介汽车市场营销概述1XML是W3C发布的一种新的标准,它同HTML一样是SGML的一个简化子集。由于XML将SGML的丰富功能、可扩展性与HTML的易用性结合到了Web的应用中,自推出以来迅速得到软件开发商的支持和程序开发人员的喜爱,显示出了强大的生命力。本章主要介绍XML的根本概念和使用方法。2XML是eXtensible Markup Language的缩写,翻译成中文就是可扩展标记语言。XML是由W3C(World Wide Web
2、Consortium,万维网协会)于1998年2月发布的一种标准,它同HTML一样是SGML(Standard Generalized Markup Language,标准通用标记语言)的一个简化子集。在正式的XML标准1.0中将XML描述为:“可扩展标记语言(XML)是SGML的子集,其目标是允许普通的SGML在Web上以目前HTML的方式被效劳、接收和处理。11.1 XML概述3所谓可扩展性是指XML允许用户按照XML规则自定义标记。XML文件是由标记及其所标记的内容构成的文本文件。与HTML不同的是,XML的标记可自由定义,其目的是使得XML文件能够很好地折射出了数据的结构和含义。因此,
3、XML被设计成易于实现,且可在SGML和HTML之间互相操作。4Web技术的开展,其丰富的信息资源给人们的学习和生活带来了极大的便利。由于HTML具有简单易学、灵活通用的特性,使人们在Internet上检索、发布、交流信息变得非常简单。然而,随着电子商务、远程教育等新兴的Web领域的全面兴起,传统的HTML由于自身特点的限制,逐渐暴露出下述问题。5(1) HTML作为一种简单的表示性语言,只能显示内容而无法表达数据内容的结构。例如:假设用HTML标记描述“书名:面向对象程序设计Java;作者:张白一,崔尚森;出版社:西安电子科技大学出版社,出版时间:2006年1月之间的逻辑关系是不可能的。HT
4、ML标题标记只标记标题文本本身,例如 XML文档,因为没有在标题标记中嵌套一个属于文档局部的实际文本和标记,所以这些标记不能用来组成树型分层结构的文档,来折射出了数据之间的逻辑关系和继承关系。而这一点恰恰是电子商务、远程教育等所必需的。6(2) HTML缺乏描述矢量图形、算术公式、化学公式等特殊标记对象。(3) 最重要的是HTML只是SGML的一个实例化的子集,它的可扩展性差,用户根本不能自定义有意义的标记供他人使用。这一切都成为Web技术进一步开展的障碍。7虽然SGML是一种通用的文档结构描述标记语言,为语法标记提供了异常强大的工具,同时具有极好的扩展性,因此在数据分类和索引中非常有用。但S
5、GML的复杂度太高,不适合网络的日常应用,加上开发本钱高、不被主流浏览器所支持等原因,使得SGML在Web上的推广受到阻碍。在这种情况下,开发一种兼具SGML的强大功能、可扩展性以及HTML的简单性的语言势在必行,由此诞生了XML语言。8XML的主要设计目标是在Web上保存并传递信息。HTML是描述数据显示的语言,而XML是描述数据及其结构的语言。XML具有下述特点:(1) XML描述数据的结构性较强。XML文档具有类似树型的分层结构,XML文档只有单个根标记,它包含了所有其它标记。一个标记可以嵌套在另一个XML标记中,因此,可以很容易地使用XML定义分层结构文档。(2) XML文档更便于阅读
6、。由于XML文档是用纯文本编写的,而且具有类似树型的逻辑结构,所以人们很容易阅读,并且可以通过为文档标记、属性和实体选择有意义的名字,并且增加有用的注释来增强XML的可读性。9(3) XML文档具有开放式标准。众多公司支持W3C,改进的XML标准支持各式系统和浏览器上的开发人员和用户使用XML文档。XML解释器可以使用编程的方法来载入一个XML的文档,当这个文档被载入以后,用户就可以通过XML文件对象模型来获取和操纵整个文档的信息。10(4) XML文档具有国际化标准。XML依靠它的统一代码的新的编码标准,支持世界上所有主要以语言编写的混合文本。在HTML中,就大多数字处理而言,一个文档一般是
7、用一种特殊语言写成的,如果用户的软件不能阅读特殊语言的字符,那么他就不能使用该文档。但是能阅读XML语言的软件就能顺利处理这些不同语言文字。XML及相关技术标准符号的任意组合,使得XML不仅能在不同的计算机系统之间交换信息,而且能跨国界和超越不同文化疆界交换信息。11(5) XML高效且可扩充性强。它支持复用文档片断,使用者可以设计和使用自己的标签,也可与他人共享。在XML中可以定义许多标记。XML提供了独立的运用程序的方法来共享数据。12XML文件的扩展名必须为“.xml。例如,“a.xml、“b1.xml都是合法的XML文件名。编写XML文档,必须遵守XML标准中的语法规则。无论是从物理结
8、构上讲,还是从逻辑结构上讲,XML都必须符合标准才能被正确解释处理。11.2 XML语法1311.2.1 XML文档结构XML文档的定义由框架语法组成。当编写一个XML文档时,可以创立自己的标记,并赋予任意的名称。这就是XML(Extensible Markup Language,可扩展标记语言)中术语“Extensible的意义。例如,下面是一个描述书籍信息的XML文档。14【例子文档c11_1.xml】一个简单的XML文档。面向对象程序设计Java 张白一,崔尚森西安电子科技大学出版社26.002006年1月15JSP实用案例教程 冯燕奎,赵德奎 等清华大学出版社35.002004年5月1
9、6XML文档主要由序言和文档根标记两个主要局部组成。序言中包含XML声明、处理指令和注释。在文档根标记中可以嵌入多个标记。如果直接用IE浏览器翻开XML文件,则显示成如图11.1所示的默认树型结构。17图11.1 c11.xml的运行结果1811.2.2 XML声明当开始着手写一个XML文件时,最好以一个“XML声明作为开始。之所以说“最好,是因为XML声明在文件中是可选内容,可加可不加,但W3C推荐参加这一行声明。因此,作为一个良好的习惯,我们通常把XML声明作为XML文件的第一行。它的作用就是告诉XML处理器:“下面这个文件是按照XML文件的标准对数据进行标记的。XML声明是以“结束的。X
10、ML声明中可以包含下述三个属性。191. version属性在一个XML的声明中必须包括version属性指明所采用的XML的版本号,而且,它必须在属性列表中排在第一位。由于当前的XML最新版本是1.0,所以我们看到的无一例外的都是version=1.0,我们在c11_1.xml中也设定 version=1.0。虽然在2002年10月15日以候选推荐标准(Candidate Recommendation)形式发表了XML1.1版本,但目前仍在征求意见之中。202. encoding属性该属性指定文档中使用的字符编码标准。我们常用的编码有:(1) GB2312或GBK:简体中文编码。(2) UT
11、F-8:压缩的Unicode编码。(3) BIG5:繁体中文编码。如果没有声明encoding属性,那么该属性默认为UTF-8编码。保存XML文档时要注意。213. standalone属性该属性可以取值“yes或“no,以说明XML文件是否和一个外部文档(独立的标记声明文件)配套使用。“yes表示与外部文件无关联。2211.2.3 XML元素元素是XML文件内容的根本单元。从语法上讲,一个元素包含一个起始标记、一个结束标记以及标记之间的数据内容。其使用形式如下: 数据内容例如,在c11_1.xml文件中的一个元素是:面向对象程序设计Java元素中还可以再嵌套别的元素。例子c11_1.xml中
12、的元素中就嵌套了元素,而元素中又嵌套了、等元素。其中元素包含了文件中所有的数据信息,称之为根元素。、等这些元素称为XML的标记。2311.2.4 XML元素根本语法规则(1) 标记必不可少。任何一个形式良好的XML文件中至少要有一个元素。也就是说,标记在XML文件中是必不可少的。(2) 区分大小写。在标记中必须注意区分大小写。在HTML中,标记和是一回事,但在XML中,它们是两个截然不同的标记。24(3) 要有正确的结束标记。结束标记除了要和开始标记在拼写和大小写上完全相同之外,还必须在前面加上一个斜杠“/。因此,如果开始标记是,则结束标记应该写作。(4) 标记要严格配对。例如,HTML中的、
13、等单边标记在XML中是不合法的。25(5) 空元素标记。空标记就是没有任何数据内容的元素。空元素的语法格式如下: 或 或 例如: 或 或 26(6) 非空元素就是有任何数据内容的元素。非空元素的语法格式如下:数据内容例如:面向对象程序设计Java(7) 标记要正确嵌套。在一个XML元素中允许包含其它XML元素,但这些元素之间必须满足嵌套性。例如,下面这么写是错误的:JAVA编程入门27(8) 标记命名要合法。标记应该以字母、下划线或冒号开头,后面跟字母、数字、句号、冒号、下划线或连字符,但是中间不能有空格,而且任何标记不能以“xml起始。另外,最好不要在标记的开头使用冒号,尽管它是合法的,但可
14、能会带来混淆。(9) 有效使用属性。标记中可以包含任意多个属性。在标记中,属性以“名称=取值的形式出现。名称与取值之间用等号“=分隔,且取值要用引号引起来。属性名不能重复。2811.2.5 XML的注释在XML中,注释是以“结束的,这和HTML的注释完全相同。但是,仍然有以下几点需要注意:(1) 在注释文本中不能出现字符“-或字符串“-,XML处理器可能把它们和注释结尾标志“-相混淆。(2) 不要把注释文本放在标记之中。(3) 注释不能嵌套。在使用一对注释符号表示注释文本时,要保证其中不再包含另一对注释符号。(4) 注释文本只能出现在XML声明之后。29标记(markup)是用来描述文档结构的
15、定界文本即元素的起始标记、元素的结束标记、空元素标记、注释、文档类型声明、处理指令、CDATA段定界符、实体引用和字符引用等。标记指出了文档的逻辑结构,包含了文档的信息内容。11.3 根标记与特殊字符3011.3.1 XML文档的根标记在XML文档中有且仅有一个根标记,其它标记都必须嵌套在根标记之内。在c11_1.xml文件中,根元素是目录,起始根标记是,结束根标记是,其内容是两个嵌套的书元素。书元素的起始标记是,结束标记是。每个书元素中又嵌套五个元素,分别是:书名、作者、出版社、价格及出版日期。3111.3.2 数据内容中的特殊字符元素是由标记和数据内容组成的,在XML中有五种特殊字符:左尖
16、括号“、与符号“&、单引号“、双引号“。W3C制定的标准中规定:数据内容中不能含有特殊字符。要想使用这五种字符,可以通过实体引用。XML常用的实体引用如表11.1所示。32表11.1 XML常用的实体引用33注意:在XML中实体引用以“&开始,以“;结束。例如,假设要输出“&这样的内容,就要使用实体引用。在XML文档中应该写成:1970年出生&解释器解释出该元素的数据是:1970年出生&34本节介绍XML文档的三种显示方式,分别是:没有样式表单的显示方式;使用CSS样式表单的显示方式;使用XSL样式表单的显示方式。11.4 显示XML文档内容3511.4.1 显示没有样式表的XML文档如果XM
17、L文件没有包含指向一个样式表的链接,当直接运行XML文件时,IE浏览器只显示如图11.1所示的整个文档的文本,并用不同的颜色来区分文档的不同组成局部,以便帮助我们理解文档的结构。在每个元素的起始标记的左边有一个“-号或“+号。“-号表示该元素的内容已全部展开;“+号表示该元素的内容已收缩。单击起始标记左边的“-号可以收缩元素,而单击已收缩元素旁边的“+号可以展开它。例如,如果单击第一个元素旁边的“-号,就会看到如图11.2所示的内容。用收缩和扩展树的形式显示文档元素,可以清楚地指出文档的逻辑结构,详细地查看各层。36图11.2 c11_1.xml收缩元素运行结果3711.4.2 显示有CSS样
18、式表的XML文档CSS(层叠样式表)是一种样式表描述规则。样式表是用来定义Web页面格局的模板,通过样式表可以定义页面的标头、页边距、缩进、字体大小及各种背景颜色等,用以完成Web页面的风格设计。381. CSS样式的定义样式的定义由一个标记的名称和定义这个标记的显示方式的属性列表组成。属性包括属性名和属性值,其间使用冒号分开,同时各种不同的属性以分号分开。属性的使用格式如下:39标记名 属性名1:属性值1; 属性名2:属性值2; 属性名k:属性值k;例如,在下边的c11_2.css程序中,“font-size、“font-weight是属性名,“36pt、“bold是属性值。402. CSS
19、样式的使用为了让XML使用CSS样式,在XML文件中必须参加使用CSS样式的声明。使用这种声明的一般格式如下:例如:表示样式表单文件与当前的XML文件在同一个目录下;表示通过链接的网址访问样式表单文件。413. 例子【例子文档c11_2.xml】调用c11_2.css的XML文件。1970年出生&42【例子文档c11_2.css】对c11_2.xml中的标记“张三定义显示样式,定义的字体大小为36pt和字体加粗。张三 font-size: 36pt; font-weight: bold;双击c11_2.xml文件,运行结果如图11.3所示。43图11.3 c11_2.xml的运行结果4411.
20、4.3 显示有XSL样式表的XML文档CSS是一种静态的样式描述格式,其本身不遵从XML的语法标准。而XSL(eXtensible Stylesheet Languge,可扩展样式语言)是遵从XML语法标准的XML的一种具体应用,它的功能比CSS强大得多。1. XML变换的根本步骤(1) 在XML文件中参加使用XSL的声明。(2) 在XSL文件中建立XML文件的样式表。(3) 在XSL文件中将样式表转换成HTML文件。XML变换的根本步骤如图11.4所示。45图11.4 XML变换的根本步骤46下面用例子来说明。【例子文档c11_3.xml】一个简单的XML文档。面向对象程序设计Java 张白
21、一,崔尚森【例子文档c11_3.xsl】显示c11_3.xml文件的XSL样式表。47 运行c11_3.xml文件,其结果如图11.5所示。48XML变换的根本步骤是:当浏览器翻开c11_3.xml文件时,浏览器内部的XSL处理器,首先进行XSL变换,将其中的XSL标记分别转换为面向对象程序设计Java 张白一,崔尚森得到一个如下的HTML文件:49 面向对象程序设计Java 张白一,崔尚森 然后执行该HTML文件,显示如图11.5所示的结果。50图11.5 c11_3.xml的运行结果512. XSL样式的使用为了让XML使用XSL样式,在XML文件中必须参加如下形式的使用XSL样式的声明:
22、例如:(1) 样式表文件与XML文件在同一目录。(2) 通过链接访问样式表。523. XSL样式表结构XSL样式表结构与XML相似,主要由序言和根标记两个主要局部组成,序言中包含XSL声明、处理指令和注释。在根标记中嵌入根模板,根模板中可嵌入多个子模板。直接用IE浏览器翻开XSL文件,显示成默认的树型结构。下面以文档c11-3.xsl为例说明其结构。53(1) 序言局部。程序中的序言局部为这里需要注意的是,样式表的编码必须与关联的XML有相同的编码。54(2) 根标记结构。程序中的根标记结构为根模板标记XSL样式表根标记的名称必须是“xsl:stylesheet。“xmlns:xsl指明的命名
23、空间表示让浏览器的XSL处理器来实现XSL变换。55(3) 根模板标记。XSL处理器首先找到根模板,然后开始XSL变换。程序中的根模板结构为 根标记模板的内容这里需要注意的是,根模板的匹配模式必须是“/。56(4) 程序中用到的XSL语句。程序中的XSL语句是XSL中的赋值语句,表示取出引号中指定的属性值,即取出书元素中书名的值(面向对象程序设计Java)。程序中用到的XSL语句如表11.2所示。57表11.2 程序中用到的XSL语句58前面介绍的是编写静态XML页面的方法。静态的XML文档只能表示比较简单的信息,而无法完成比较复杂的客户端与效劳器端的交互。本节我们主要介绍动态生成XML文档的
24、方法。包括用Servlet动态生成XML文档和用JSP动态生成XML文档。11.5 用Servlet和JSP动态生成XML文档5911.5.1 用Servlet动态生成XML文档为了说明用Servlet动态生成XML文档的方法,我们编写下述三个文件:一是填写留言信息的HTML文件;二是获得留言信息并生成XML文件的Servlet程序;三是对XML文件标记附加不同的样式,生成HTML文件的XSL文件。601. 填写留言信息的例子文档c11_4_html.html message board 留言板 姓名:61 留言: 62 运行c11_4_html.html程序,填写留言信息,结果如图11.6所
25、示。63图11.6 c11_4_html的运行结果642. 获得留言信息,并生成XML文件的Servlet例子程序C11_4_XSL_Servlet.javaimport java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class C11_4_XSL_Servlet extends HttpServlet/重写doPost方法public void doPost(HttpServletRequest req, HttpServletResponse res)throws ServletException,
26、IOException65/设置效劳器输出格式为XML文档res.setContentType(text/xml); /获得与客户端的浏览器链接的输出流,用于发送输出结果ServletOutputStream out=res.getOutputStream(); out.print();out.println();out.println();66 out.println();out.println(req.getParameter(name); out.println();out.println();out.println(req.getParameter(content);out.print
27、ln();out.println();out.close();67/重写doGet方法public void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException,IOExceptiondoPost(req,res);683. 对XML文件标记附加不同样式的XSL例子文件c11_4.xsl 69 C11_4_XSL_Servlet的运行结果如图11.7所示。图11.8是XSL文件在Eclipse平台中的存放位置说明。70图11.7 C11_4_XSL_Servlet的运行结果71图11.8 c
28、11_4.xsl的存放位置7211.5.2 用JSP动态生成XML文档直接将XML内容在JSP中输出的JSP例子程序如下。【例子程序c11_5.jsp】生成XML文件的JSP例子程序。 % out.println(+ 面向对象程序设计Java +73 张白一,崔尚森+ 西安电子科技大学出版社+ 26.00+ 2006年1月+ ); % % out.println(+ JSP实用案例教程+ 冯燕奎,赵德奎 等+74 清华大学出版社+ 35.00+ 2004年5月+ ); % 【例子文档c11_5.xsl】对XML文件附加不同样式的XSL例子文件。75 书目录 书名作者出版社价格出版日期 76 7
29、7 c11_5.jsp的运行结果如图11.9所示。78图11.9 c11_5.jsp的运行结果7911.5.3 使用DOM解析XML文件DOM(Document Object Model,文档对象模型)是提供XML和HTML文档编程接口的W3C标准。XML文档将数据组织为一棵树,DOM就是对这棵树对象的描述。DOM解析XML文件后,就用树的形式定义了XML文件在内存中的逻辑结构,XML文件中的元素便转化为DOM树中的节点对象。80Sun公司推出的JDK1.4及以上版本中的Java API遵循了 DOM Level 2 Core推荐接口的语义说明,提供了相应的Java语言的实现。Java应用程序
30、可以通过DOM API来访问XML数据。javax.xml.parsers包中提供的DoumentBuilder和DocumentBuilderFactory组合,可以对XML文件进行解析,转换成DOM树。org.xml.dom包中提供了Document、Node、NodeList、Element、Text等接口,可以创立、遍历、修改DOM树。javax.xml.transform.dom和javax.xml.transform.stream包中提供了DOMSource类和StreamSource类,可以将更新后的DOM文档生成XML文件。81为了解析XML文件,DOM规定了各种类型节点之间形
31、成的如图11.10所示的子孙关系。Document节点代表了整个XML或HTML文档,提供了对文档元素和数据的访问。所有其它的节点都以一定的顺序包含在Document中,排成一个树型结构。它提供许多方法来获取该节点及节点的相关信息。82图11.10 DOM树中节点间的关系83Element元素表示一个XML或HTML元素。文档的数据包含在它的元素中。元素也可具有提供附加内容信息的属性。它提供许多方法来获取该节点及节点的相关信息。Text节点表示的是元素或属性值的文本内容,对应着XML中的数据内容。CDATASection节点解决XML文档中的特殊字符的实体引用问题。DocumentType节点
32、对应着XML文档所关联的DTD文件。84下面通过例子来说明如何使用DOM解析XML文档。【例子文档c11_6.xml】一个简单的XML文档。 面向对象程序设计Java 张白一,崔尚森 西安电子科技大学出版社 26.00 2006年1月85 JSP实用案例教程 冯燕奎,赵德奎 等 清华大学出版社 35.00 2004年5月 如果用DOM来图形化地表示c11_6.xml文档,则如图11.11所示。86图11.11 c11_6.xml的运行结果87【例子程序c11_6.java】用DOM解析c11_6.xml文档的Java程序。import org.w3c.dom.*; /XML的DOM实现 imp
33、ort java.io.*;import javax.xml.parsers.*; /XML解析器接口 public class C11_6 public static void main(String args) try /获得一个XML文档的解析器88 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); /解析XML文档生成DOM文档的接口类,以便访问DOM DocumentBuilder builder = factory.newDocumentBuilder(); /Document接口描述了对应于XML文档的文档树 Document document = builder.parse(new File(C11_6.xml);89 /去掉XML文档中作为格式化内容的空白,/而映射在DOM树中的不必要的Text Node对象 document.normalize(); Element root=document.getDocumentElement(); /获得根元素 String rootName=root.getNodeName(); /得到根元素名90 System.out.prin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合川区初中“七校联盟”2025年春期半期质量检测七年级 英语试题
- 投资基金合同履约金的管理
- 《Python程序设计基础》课件 第7、8章 面向对象编程;文件与异常
- 《Python程序设计基础》课件 第5-8章 函数与模块-文件与异常
- 铁路工程安全技术石家庄铁路35课件
- 《GB 18399-2001棉花加工机械安全要求》(2025版)深度解析
- ARM Cortex-M3嵌入式开发及应用教与学 课件 第12、13章 信号量与互斥信号量;消息邮箱与消息队列
- 大学生职业规划大赛《英语专业》生涯发展展示
- 简单版度个人耕地承包协议
- 农产品购销合作协议
- 沪科版初中数学目录
- JCT862-2008 粉煤灰混凝土小型空心砌块
- 你也走了很远的路吧
- 全国水利ABC证单选题七
- Unit 3 What would you like单元作业设计
- 竣工结算审计服务投标方案
- 人机工程培训(推行团队版)-课件
- GB 150-1998钢制压力容器
- 工程联系单(模板)
- 2023年海南省财金集团有限公司招聘笔试模拟试题及答案解析
- 公司奖项申请表(个人)
评论
0/150
提交评论