【XML技术】web杂谈(3)之深入理解什么是XML、XML的语法详解

news2024/11/18 11:29:01

涉及知识点

什么是 XML,XML的特征,XML的基本语法及应用,应用程序接口(DOM&SAX),XML的文档的显示,深入了解XML技术。
原创于:CSDN博主-《拄杖盲学轻声码》,更多内容可去其主页关注下哈,不胜感激


文章目录

  • 涉及知识点
  • 前言
  • 1.XML 的特征
  • 2.XML 的基本语法
    • 1)声明
    • 2)元素
    • 3)属性
    • 4)注释
    • 5)处理指令
    • 6)CDATA
  • 3.应用程序接口(DOM&SAX)
    • 1)文档对象模型(DOM)
    • 2)简单应用程序接口(SAX)
  • 4.XML 文档的显示
    • 1)层叠样式单(CSS)
    • 2)扩展样式单语言(XSL)
  • 涨薪支持区
  • 总结


前言

Web 上的文档组织包含了服务器端文档的存储方式、客户端页面的浏览方式以及传输方式。下一代 Web 对文档的组织在数据表达能力、扩展能力、安全性上都提出了新的要求。HTML 已经不能满足当前网络数据描述的需要。1998 年 2 月 10 日 W3C(World Wide Web Consortium) 正式公布了 XML1.0 版本。XML(Extensible Markup Language),即可扩展标记语言,是用于标记电子文件的结构化语言。与 HTML 相比,XML 是一种真正的数据描述语言,它没有固定的标记符号,允许用户自己定义一套适合于应用的文档元素类型,因而具有很大的灵活性。XML 包含了大量的自解释型的标识文本,每个标识文本又由若干规则组成,这些规则可用于标识, 使 XML 能够让不同的应用系统理解相同的含义,正是由于这些标识的存在,XML 能够有效地表达网络上的各种知识,也为网上信息交换提供了载体。
更多考试总结可关注CSDN博主-《拄杖盲学轻声码》

1.XML 的特征

XML 与 HTML 相比主要有以下特点:
(1)XML 是元标记语言。HTML 定义了一套固定的标记,每一种标记都有其特定的含义。XML 与之不同,它是一种元标记语言,用户可以自定义所需的标记。
(2)XML 描述的结构和语义。XML 标记描述的是文档的结构和意义,而不是显示页面元素的格式。简单地说就是文档本身只说明文档包括什么标记,而不是说明文档看起来是什么样的。
(3)XML 文档的显示使用特有的技术来支持。例如,通过使用样式单为文档增加格式化信息。

2.XML 的基本语法

一个格式正规的 XML 文档由 3 个部分组成:一个可选的序言(prolog)、文档的主体(body)和可选的尾声(epilog)。一个 XML 文件通常以一个 XML 声明开始,后面通过 XML 元素来组织 XML 数据。XML 元素包括标记和字符数据。标记用尖括号括起来以便与数据区分开来。尖括号中可以包含一些属性。为了组织数据更加方便、清晰,还可以在字符数据中引入 CDATA 数据块,并可以在文件中引入注释。此外,由于有时需要给 XML 处理程序提供一些指示信息,XML 文件中可以包含处理指示。
一个符合 XML 文档语法规范的 XML 文档是“格式正规”的文档,以下是一份格式正规的XML 文档:

<?xml version="1.0"encoding="GB2312"?>
<?xml-stylesheet href="style.xsl"type="text/xsl"?>
<!——以上是XML 文档的序言部分——>

<COLLEGE>
<TITLE>计算机学院</TITLE>
<LEADER>王志东</LEADER>
<STU_NUMBER unit="人">3  <STU_NUMBER>

<STUDENT>
<NAME>李文</NAME>
<AGE>21</AGE>
<SEX>男</SEX>
<CLASS>9902</CLASS>
</STUDENT>
<STUDENT>
<NAME>张雨</NAME>

<AGE>20</AGE>
<SEX>女</SEX>
<CLASS>9901</CLASS>
</STUDENT>
<STUDENT>
<NAME>刘鹃</NAME>
<AGE>19</AGE>
<SEX>女</SEX>
<CLASS>9903</CLASS>
</STUDENT>
<STUDENT>
<!——以上是文档的主体部分,以下是文档的尾声部分——>

可以看出,XML 文档序言部分从文档的第一行开始,它可以包括 XML 声明、文档类型声明、处理指令等。文档的主体则是由文档根元素所包含的那一部分。XML 尾声部分在文档的末尾, 它可以包含注释、处理指令或空白。
接下来分别介绍组成文档的各种要素,以此来阐述 XML 文档的基本语法。

1)声明

一个 XML 文件通常以一个 XML 声明作为开始,XML 声明在文件中是可选内容,可加可不加, 但 W3C 推荐加入这一行声明。因此,作为一个良好的习惯,通常把 XML 文件的第一行。
XML 声明的作用就是告诉 XML 处理程序:“下面这个文件是按照 XML 文件的标准对数据进行置标的”。例如,一个最简单的 XML 声明是这样的:
<?xml version="1.0"?>
可以看到,XML 声明由“<?”开始,由“?>”结束。在“<?”后面紧跟着处理指示的名称,在这里 xml,XML 这 3 个字母不区分大小写。
XML 声明中要求必须指定 version 的属性值,同时,声明中还有两个可选属性:standalone和 encoding,因此,一个完整的 XML 声明应该是这样的:
<?xml version="1.0"encoding="GB2312"standalone="no"?>
下面来看看这几个属性的具体含义。
(1)Version 属性:指明所采用的 XML 的版本号,而且,它必须在属性列表中排在第一位。由于当前的 XML 最新版本是 1.0,所以看到的情况无一例外地都是:version="1.0"。
(2)encoding 属性,所有 XML 语法分析器都要支持 8 位和 16 位的编码标准。不过,XML 可能支持一个更庞大的编码集合。在 XML 规范中列出了一大堆编码类型。但一般用不到这么多编码,只要知道下面几个常见的编码就可以了:GB2312(简体中文码)、BIG5(繁体中文码)、UTF—8(西欧字符)。
XML 的字符编码标准是 Unicode,因此所有的 XML 解析器都应该提供对 Unicode 编码标准的支持。该字符编码标准中每个字符用16 比特表示,可以表示65 536 个不同的字符。与Unicode 之前被广泛使用的 SSCII 相比,Unicode 码最大的好处是能够处理多种语言字符。采用哪种编码取决于文件中用到的字符集。如果标记是采用中文书写的,则必须要在声明中加上encoding="GB2312"的属性。
(3)standalone 属性:表明该 XML 文件是否需要从其他外部资源获取有关标记定义的规范说明,并据此检查当前 XML 文档的有效性。这个属性值的默认值为 no,表示可能有也可能没有这样一个文件。如果该属性为 yes,说明没有另外一个配套的文件来进行置标声明。

2)元素

当已经写好一个 XML 声明,一个新的 XML 文件就宣告诞生了。而当文档的主体则由一个或多个元素组成,元素是 XML 文件内容的基本单元。从语法上讲,元素用标记(tag)进行分隔,一个元素包含一个起始标记和一个结束标记,属性和标记之间的数据内容是可选的,其形工如图 6-20 所示。
元素可以包含其他元素、字符数据、实体引用、处理指令、注释和 CDATA 部分。 些统称为元素内容(element content)。
位于文档最顶层的一个元素包含了文档中其他所有元素,称为根元素。另外,元素中还可以再嵌套别的元素。需要说明的是,元素之间应正确的嵌套,不能互相交叉。所有元素构成一个简单的层次树,元素和元素之间惟一的直接关系就是父子关系。XML 文档的层次结构如图 6-21 所示。
“置标” 是XML 语言的精髓。因此,标记在 XML 的元素中、乃至整个 XML 文件中,占有举足轻重的位置。XML 的标记和 HTML 的标记在模样上大体相同,除了注释和 CDATA 部分以外, 所有符号“<”和符号“>”之间的内容都称为标记。其基本形式为:
<标记名(属性名="属性值")*>
XML 对于标记的语法规定比 HTML 要严格得多。
(1)标记命名要合法。XML 规范中的标识符号命名规则为:标记必须以字母、下划线“”或冒号“:”开头,后跟有效标记命名符号,包括字母、数字、句号“.”、冒号“:”、下划线 “”或连字符“-”,但是中间不能有空格,而且任何标记不能以 xml 起始。另外,最好不要在标记的开头使用冒号,尽管它是合法的,但可能会带来混淆。在 XML1.0 标准中允许使用任何长度的标记,不过,现实中的 XML 处理程序可能会要求标记的长度限制在一定范围内。
(2)区分大小写。在标记中必须注意区分大小写。在 HTML 中,标记<HELLO>和<hello
>是一回事,但在 XML 中,它们是两个截然不同的标记。
(3)必须有正确的结束标记。结束标记除了要和开始标记在拼写和大小写上完全相同, 还必须在前面加上一个斜杠“/”因此,如果开始标记是<HELLO>,结束标记应该写作</HELLO>。XML 要求标记必须配对出现。不过,为了简便起见,当一对标记之间没有任何文本内容时,
可以不写结束标记,而在开始标记的最后以斜杠“/”来确认。这样的标记称为“空标记”,例如:<emptytag/>。
(4)标记间要正确嵌套。在一个 XML 元素中允许包含其他 XML 元素,但这些元素之间必须满足嵌套性,标记不能相互交叉。例如下面是最常见的 HTML 标记重叠的例子,它可以在大多数浏览器中命名用,但在 XML 中却是非法的:
<B>bold text<l>bold-italic</B>plain italic text⋯</l>
在这个例子中,type 和 color 是 commodity 标记的属性,“服装”是 type 属性的取值, “黄色”是color 属性的取值。
属性命名的规范与标记命名规范大体相似,需要注意有效字母、大小写等一系列问题。不过,在必要的时候,属性中也可以包含空格符、标点和实体引用。需要特别注意的是,在XML 中属性的取值必须用引号引起来,但在 HTML 中这一点并不严格要求。]
最后要说明一点,属性的所有赋值都被看作是字符串类型。因此,如果处理程序读到下面这段 XML 标记:
<圆柱体 半径="10"高"13">
应用程序应该能够把字符串“10”和“13”转达化为它们所代表的数字。

3)属性

属性和子元素常常能够表述相同的内容,如何判断是使用属性还是子元素有一定难度。一般来说,属性较为简洁、直接,而且有较好的可读性。相反,使用过多的子元素则会使 XML 充斥着大量的开始和结束标记,降低其可读性。在下面几种情况中,宜采用子元素代替属性:
(1)属性不能包含子属性,对于一些复杂的信息,宜采用复合的子元素来说明。
(2)若元素的开始标记中包含了过多的属性,或标记中的元素名称、属性名称、属性取 值过长,造成整个开始标记过长而降低了程序的可读性,则可以考虑使用子元素替代属性。空格属性和语言属性是 XML 系统提供的两个特殊属性,使用它们可以说明具体 XML 元素
中的空格和语言特性。
(1)空格属性的基本形式如下:
空格属性 xml:space
空格属性为“xml:space“,它用业说明是否需要保留 XML 元素数据内容的空格字符。空格属性只有两个可能的取值:default 和 preserve。有些情况下,为了保证 XML 文档具有较好的可读性,在书写时会引往事些空格和回车符,使用 default 属性值将自动除去这些空格和回车符,还原 XML 元素内容原有的格式。而使用 preserve 属性值将保留 XML 元素中的所有空格和回车符。
空格属性是可继承属性,指定一个元素的空格属性后,该元素所包含的所有子元素,除非定义自己的空格属性,否则将继承使用父元素指定的空格属性。
(2)语言属性的基本形式如下:
语言属性 xml:lang
语言属性用来说明 XML 元素使用何种语言。语言属性的取值较多,多以国际标准 ISO639 中编码为标准,如英语的编码是 en,法语的编码为 fr。语言属性的取值也可以使用 IANA
(Internet Assigned Numbers Authority)中定义的编码,不过必须增加“I-”或“i-”前缀。用户自定义语言编码则应该以“X-”或“x-”开始。在ISO639 编码中,除了说明语种之外,还可以说明区域,例如“en-GB”指英国英语,而“en-US”指美国英语。使用语言属性有助于开发多语种的应用。与空格属性一样,语言属性也是可继承属性。

4)注释

有时候,希望在 XML 文件中加入一些作解释的字符数据,并且希望 XML 解析器不对它们进行处理。这种类型的文本称作注释(comment)文本。
在 HTML 中,注释是用“<!——”和“——>”引起来的。在 XML 中,注释的方法完全相同,这样看起来会非常亲切。
不过,在 XML 文件中使用注释时,要遵守以下和个规则。
(1)在注释文本中不能出现字符“—”或字符串“——”,XML 解析器可能把它们和注释结尾标志“——>”相混淆。
(2)不要反注释放在标记之中。否则,它就不是一个“格式正规”的XML 文档。例如下面这段代码:
<错误注释<!——注释——>></错误注释>
类似地,不要反注释文本放在实体声明中,也不要放在 XML 声明之前。记住,永远用 XML 声明作为 XML 文件中的第一行。
(3)注释不能被嵌套,在使用一对注释符号表示注释文本时,要保证其中不再包含另一对注释符号。例如下面例子是不合法的:
<!——错误XML 注释嵌套的例子<!——一个注释——>——>
使用注释时要确保文件在去掉全部注释之后,遵守所有“格式正规”文档的要求。5)内嵌的替代符
字符<、>、&、'和"是 XML 的保留字符,XML 利用它们定义来说明元素、标记或属性等。XML 的解析器也将这些字符视为特殊字符,并利用它们来解释 XML 文档的层次内容结构。这样一来,当 XML 内容中包含这些字符,并且需要显示它们的时候,就可能会带来混乱和错误。为了解决这个问题,XML 使用内嵌的替代符来表示这些系统保留字符。如表所示。
表 XML 中的内嵌替代符

替代符含义例子解析结果
&it3⁢53<5
&gt5>35>3
&amp&A&BA&B
&aposJoe'sJoe's
&quot"yes""yes"

表 中“'”和“"”只用在属性说明中,在开始标记之外的 XML 正文中可以直接使用单引号和双引号。
利用偿嵌的替代符还可以通过指明字符的 Unicode 码值来直接说明字符。例如偿嵌替代符“& # x00A3”代表了码值为 163 的 Unicode 字符,即英镑货币符号。
上述的 5 种内嵌替代符属性标准的 XML 实体,是 XML 实体中最简单的一类,其他复杂的实体将在后面陆续介绍。

5)处理指令

处理指示(PI,Processing Instruction)用来给处理 XML 文件的应用程序提供信息。也就是说,XML 解析器可能并不处理它,而把这结信息原封不动地传给 XML 应用程序来解释这个指示并遵照它所提供的信息进行处理。其实,XML 声明就是一个处理指示。
所有处理指示应该遵循下面的格式:

<?xml-sylesheet type="text/xsl"href="mystyle.xsl"?>
处理指令为 XML 开发人员提供了一种跨越各种元素层次结构的指令表达方式。从而使得应用程序能够按照指令所代表的意义来处理文档。
<article>
<title><?beginUseBold?>节约能源
</title>
<content>能源危机<?endUseBold?>早已经不是陌生的话题
</content>
</article>

在上面的文档中,希望将标题和段落的前 4 个汉字用黑体表示。当然上述效果也可以通过设置元素属性的方式加以处理。

6)CDATA

有些时候,希望 XML 解析器能够把在字符数据中引入的标记当作普通数据而不是真正的标记来看待。这时,CDATA 标记可以助一臂之力。在标记 CDATA 下,所有标记、实体引用都被忽略,而被 XML 处理程序一视同会地当作字符数据看待。CDATA 的基本语法如下:

<![CDATA[文本内容]]>
很显然 CDATA 的文本内容中是不能出现字符串“]]>”的,因为它代表了 CDATA 数据块的结束标志。前面,讲过 XML 内嵌的替代符,但是当文本数据中包含大量特殊符号时,不得不通篇地使用替代符,把本来很清晰的一段文字搞得乱七八糟。为了避免这种不便,可以把这些字符数据放在一个 CDATA 数据块中,这样不管它是否含有元素标签符号和实体引用,这些数据统统被当作没有任何结构意义的普通字符串。例如:

<Adress>
<![CDATA[
<联系人>
<姓名>Jack</姓名>
<EMAIL>Jack@edu.cn</EMAIL>
</联系人>
]]>
</Adress>

只要有字符出现的地方都可以出现 CDATA 部分,但它们不能够嵌套。在 CDATA 部分中惟一能够被识别的字符串就是它的结束分隔符“]]>”。

3.应用程序接口(DOM&SAX)

实际上,XML 文档就是一个文本文件,因此在需要访问文档中的内容时,必须首先书写一个能够识别 XML 文档信息的文本阅读器,也就是通常所说的 XML 解析器(Parser),由它负责对 XML 文档的语法正确性进行验证,并提取其中的内容。XML 文档有时是动态生成的,使得用户能够创建、访问和修改一个 XML 文件。有时候,所开发的应用程序需要能够读懂别人写的XML 文件,从中提取所需要的信息。
在以上的这些情况下,都需要一个类似于 ODBC/JDBC 这样的数据库接口规范的统一的 XML 接口,这个接口使得应用程序与 XML 文档结合在一起,让应用程序能够对 XML 文档提供完全的控制。W3C 意误解到上述问题的存在,于是制订了一套书写 XML 解析器的标准接口规范:文档对象模型(DOM,Document Object Model)。除此之外,XML_DEV 邮件列表中的成员根据应用的需求也自地定义了一套对XML 文档进行操作的接口规范一简单应用程序接口(SAX,Simple APIs for XML)。这两种接口规范各有侧重,互有长短,都得到了广泛的应用。
图 6-22 显示了 DOM 和SAX 在应用程序之间的关系。从图中可以看出,应用程序不是直接对 XML 文档进行操作的,而首先由 XML 解析器对 XML 文档进行分析,然后,应用程序通过 XML 分析器所提供的 DOM 接口或 SAX 接口对分析结果进行操作,从而实现了对 XML 文档的访问。

1)文档对象模型(DOM)

DOM 的全称是文档对象模型(Document Object Model)。在应用程序中,基于 DOM 的XML
解析器将一个 XML 文档转换成一棵 DOM 树,应用程序正是通过 DOM 树来实现对 XML 文档数据
的操作。通过 DOM 接口,应用程序可以在任何时候访问 XML 文档中的任何一部分数据,因此, 这种利用 DOM 接口的机制也被称作随机访问机制。
无论 XML 文档中所描述的是什么类型的信息,利用 DOM 所生成的模型都是结点树的形式。也就是说,DOM 强制使用树模型来访问 XML 文档中的信息。在这种模型下,每个元素对应一个结点,而每个结点都可以包含它自己的结点子树,在每个文档的顶端是文档根终点。由于 XML 本质上就是一种分层结构,所以这种描述方法是相当有效的。

<?xml version="1.0"?>

<address>
<person sex = "male">
<name>Jack</name>
<email>Jack@xml.net</email>
</person>
</address>

用 DOM 来表示这段文档。
应用程序通过对该对象模型的操作,实现对 XML 文档中数据的操作。DOM API 提供给用户的是一种随机访问机制。通过它,应用程序不仅可以在任意时候访问 XML 文档中的任何数据, 而且可以任意地插入、删除、修改、移动和存储 XML 文档中的内容。它提供了一种访问操作存储在 XML 文档内信息的标准化方法,搭建了应用程序和 XML 文档之间联系的桥梁。
由于 DOM 解析器把整个 XML 文档转化成 DOM 树放在了内存中,因此,当文档比较大或者结构比较复杂时,对内存的需求就比较高。而且,对于结构复杂的树的遍历也是一项耗时的 操作。所以,DOM 解析器对机器性能的要求比较高,实现效率不十分理想。不过,由于 DOM 解析器所采用的树结构的思想与 XML 文档的结构相吻合,同时鉴于随机访问所带来的方便,因此,DOM 解析器的应用十分广泛。

2)简单应用程序接口(SAX)

SAX 的全称是 XML 简单应用程序接口(Simple APIs for XML)。与 DOM 不同,SAX 采用顺序访问模式,是一种快速读写 XML 数据的方式。当使用 SAX 解析器对 XML 文档进行分析时, 会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对 XML 文档的访问,因而 SAX 接口也被称作事件驱动接口。
SAX 提供的是一种顺序访问机制,对于已经解析过的部分,不能再倒回去重新处理。SAX 之所以叫做“简单”应用程序接口,是因为 SAX 解析器只做了一些简单的工作,大部分工作还要由应用程序自己去做。也就是说,SAX 解析器在实现时,它只是顺序地检查 XML 文档中的字节流,判断当前字节是 XML 语法中的哪一部分、是否符合 XML 语法,然后再触发相应的事
件,而事件处理函数本身则要由应用程序自己来实现。同 DOM 分析器相比,SAX 解析器缺乏灵
活性。然而,由于 SAX 解析器实现简单,对内存要求比较低,因此实现效率比较高,对于那些只须访问 XML 文档中的数据而不对文档进行更改的应用程序来说,SAX 解析器更为合适。
SAX 解析器的大体构成框架如图 6-24 所示。图 6-24 中最上方的 SAXParserFactory 用来生成一个分析器实例。XML 文档是从左侧箭头所示处读入,当解析器对文档进行分析时,就会触发在 DocumentHandler,ErrorHandler,DTDHandler 以及 EntityResolver 接口中定义的回调方法。

4.XML 文档的显示

HTML 中的标记主要用来说明 HTML 文档在浏览器中的显示格式,所以 HTML 文档的显示格式基本是固定的。而 XML 中的标记是开发者定义的,主要用来说明 XML 程序文档所表述的数据的内在结构关系。这样一来,XML 程序文档的显示格式就需要用另外的机制来定义。层叠样式单(CSS,Cascading Style Sheet)和扩展样式单语言(XSL,eXtensible Style Sheet Language)是 W3C 推荐的表达 XML 文档数据显示格式的两种标准。

1)层叠样式单(CSS)

层叠样式单最早是为方便 HTML 语言而提出的,使用层叠样式单能保证文档显示格中草药的一致性和较好的格式化,在 XML 中使用层叠样式单可以方便开发人员为自定义的元素和标记定义其显示格式。通过层叠样式单可以产生上百种显示格式信息,例如字体,颜色,位置等。
层叠样式单信息可以以属性、属性组或独立文件的形式存在。一般认为以独立文件的形式存在较好,因为这样可以方便层叠样式单信息的管理、修改、维护和复用。
层叠样式单的功能虽不如扩展样式单语言强,但其实际和开发过程相对容易的多。在此不详细介绍 CSS 标准,需要了解这一技术细节可以参考其他书籍。

2)扩展样式单语言(XSL)

CSS 是一种静态的样式描述格式,其本身不遵从 XML 的语法规范。扩展样式单语言不同, 它遵守 XML 的语法规则,是 XML 的一种具体应用。这也就是说,XSL 本身就是一个 XML 文档, 系统可以使用同一个 XML 解释器对 XML 文档及其相关的 XSL 文档进行解释处理。
XSL 语言可分为 3 个不同的部分:
·转换工具(XSLT,XSL Transformations)。它描述了如何将一个没有形式表现的 XML文档内容转换为可浏览或可输出的格式。
·格式对象(FO,Formatted Object)。
·XML 分级命令处理工具 XPath。
一个 XML 文档的显示过程是这样的:首先根据 XML 文档构造源树;然后根据给定的 XSL 将这个源树转换为可以显示的结果树,这个过程称作树转换;最后再按照 FO 解释结果树,产生一个可以在屏幕上、纸上、语音设备或其他媒体中输出的结果,这个过程称作格式化。
描述树转换的这一部分协议日趋成熟,已从 XSL 中分离出来,另取名为 XSLT,其正式推
荐标准于 1999 年 11 月 16 日公布,现在一般所说的 XSL 大都指的是 XSLT。与 XSLT 一同推出
的还有其配套标准 XPath,这个标准用来描述如何识别、选择、匹配 XML 文档中的各个构成元件,包括元素、属性、文字内容等。
XSLT 主要的功能就是转换,它将一个 XML 文档作为一个源树,将其转换为一个有样式信息的结果树。在 XSLT 文档中定义了与 XML 文档中各个逻辑成分相匹配的模板,以及匹配转换方式。值得一提的是,尽管制订 XSLT 规范的初衷只是利用它来进行 XML 文档可格式化对象之间的转换,但它的巨大潜力却表现在它可以很好地描述 XML 文档向任何一个其他格式的文档作转换的方法,例如转换为另一个逻辑结构的 XML 文档、HTML 文档、XHTML 文档、VRML 文档、SVG 文档等,不一而足。限于目前浏览器的支持能力,大多数情况下是转换为一个 HTML 文档进行显示。
具体的转换过程,既可以在服务器端进行,也可以在客户端进行。两者分别对应着不同的转换模式:
·服务器端转换模式。在这种模式下,XML 文件下载到浏览器前先转速换成 HTML,然后再将 HTML 文件送往客户端进行浏览。
·客户端转换模式。这种方式是将 XML 和 XSL 文件都传送到客户端,由浏览器实时转换。前提是浏览器必须支持 XML+XSL。
下面来看一下 XSLT 的简单例子。通过剖析这个例子,可以对 XSLT 的基本语法和功能有一个了解。

<?xml version="1.0"encoding="gb2312"?>
<?xml-stylesheet type="text/xsl"href="mystyle.xsl"?>
<roster>
学生花名册
<student>
<name>李华</name>
<origin>河北</origin>
<age>15</age>
<telephone>62875555</telephone>
</student>
<student>
<name>张三</name>
<origin>北京</origin>
<age>14</age>
<telephone>82873425</telephone>
</student>

</roster>

<?xml version="1.0"encoding="gb2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/REC-html40">
<xsl:template>
<xsl:apply-templates/>
</xsl:template>

<xal:template match="/">
<HTML>
<HEAD>
<TITLE>学生花名册</TITLE>
<STYLE>.title{font-size:15pt;font-weight:bold;color:blue}.name{color:
red}
</STYLE>
<HEAD>
<BODY>
<P class="title">学生花名册</P>
<xsl:apply-templates select="roster"/>
</BODY>
</HTML>
</xsl:template>

<xsl:template match="roster">
<TABLE BORDER="1">
<THEAD>
<TD><B>姓名</B></TD>
<TD><B>籍贯</B></TD>
<TD><B>年龄</B></TD>
<TD><B>电话</B></TD>
</THEAD>
<xsl:for-each select="student"order-by="name">
<TR>
<TD><B><xsl:value-of select="name"/></B></TD>

<TD><xsl:value-of select="origin"/></TD>
<TD><xsl:value-of select="age"/></TD>
<TD><xsl:value-of select="telephone"/></TD>
</TR>
<xsl:for-each>
</TABLE>
</xsl:template>
</xsl:stylesheet>

可以看出,在 XML 中声明 XSL 样式单的格式是:
<?xml-stylesheet type="text/xsl"href="样式单文件名"?>
为看懂上例中的 XSL 源码,首先介绍一下 XSL 的几条主要语句。
(1)xml-stylesheet:声明语句。
(2)xsl:template:相当于编程中函数的概念。
(3)xsl:template match="":相当于函数调用,去匹配引号中指定的结点。
(4)xsl:apply-templates:应用模板函数。
(5)xsl:apply-templates select="":应用模板函数的调用,跳转到引号中指定的模板。
(6)xsl:for-each select="":循环语句,遍历与引号中的属性值相同的结点。
(7)xsl:value-of select="":赋值语句,取出引号中指定的属性值。
知道了上面这些语句的含义,就可以分析一下这段 XSLT 源代码的执行过程了,整个过程如图 6-25 所示。在 IE 中的浏览效果如图 6-26 所示。

涨薪支持区

期待大家能通过这篇文章学到更多,而且薪资一年更比一年猛!
喜欢博主的话可以上榜一探究竟,博主专设涨薪皇榜给大家查阅,喜欢的可以点击此处查看哟。
在这里插入图片描述


总结

更多资料大家可以关注csdn博主-《拄杖盲学轻声码》

以上就是今天要讲的内容,本文主要介绍了什么是XML,XML技术的实际应用,也期待大家分享更多,帅哥美女们给个赞呗,2023年一起加油!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/694832.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

马氏距离mahalanobis distance

来看个题 【解】 代码验证 import numpy as np from scipy.spatial.distance import mahalanobis# 定义四个点坐标的数组 points np.array([[0.5, 1.5], [4, 4], [8, 6], [2, 2]])# 计算协方差矩阵 covariance_matrix np.cov(points.T)# 计算马氏距离 mean np.mean(points,…

策略模式Strategy介绍与C++实现

目录 1、策略模式的提出: 2、策略模式定义: 3、策略模式总结: 4、需求描述: 5、普通实现 6、使用策略模式实现 1、策略模式的提出: 在软件构建过程中,某些对象使用的算法可能多种多样,经…

Ubuntu下 NVIDIA Container Runtime 安装与使用

NVIDIA Container Runtime官网 GitHub仓库:Docker 是开发人员采用最广泛的容器技术。借助 NVIDIA Container Runtime,开发人员只需在创建容器期间注册一个新的运行时,即可将 NVIDIA GPU 暴露给容器中的应用程序。用于 Docker 的 NVIDIA Conta…

自然语言处理:任务与应用

文章目录 一、基本任务1.词性标注Part-of-speech (POS) tagging2.命名实体识别Named Entity Recognition (NER)3.共指消解Coreference Resolution4.句法依赖解析Syntactic Dependency Parsing5.中文分词Chinese Word Segmentation 二、常见应用1.文本匹配2. 知识图谱3. 问答系统…

微服务中的负载均衡

如图 有三处需要负载均衡 这里主要讲内部的grpc调用的 负载均衡 图中3的地方 ① 集中式load balance ② 进程内load balance ③独立进程load balance 首选第二种方式

华为MateBook 16 2021款锐龙版R7(CREM-WFD9)(CREM-WFG9)原装出厂Win11系统工厂模式,恢复原厂系统

HUAWEI华为笔记本电脑,MateBook 16 2021款 锐龙版 R7(CREM-WFD9) (CREM-WFG9) 原厂Windows11系统,带F10恢复功能,原装OEM专用系统,恢复出厂状态 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、华为电脑管家等预装程序 …

Java启动项目时,控制台报端口被占用,解决办法

端口占用一般是现在有别的程序正在使用该端口 第一步可以先查出来是哪个程序在占用: netstat -aon | find "8113" //8113为被占用的端口号 此时的结果是这样的,查询出来的为占用此端口程序的PID( 25472 ) 然后根据…

隐式迭代是什么意思?jQuery选择器隐式迭代

在使用jQuery 选择器获取元素后,如果不考虑获取到的元素数量,直接对元素进行操作,则在操作时会发生隐式迭代。隐式迭代是指,当要操作的元素实际有多个时,jQuery 会自动对所有的元素进行操作,示例代码如下。…

Centos 系统中使用 Firefix 播放视频 - VLC播放器的安装

问题: 出于刷视频的需要,需要使用虚拟机(Centos7)上的 Firefix 来播放视频,经确认安装 flash 的方式是不行的。事实上在 Firefix 播放视频仅需要安装 VLC 播放器就可以了,以下记录安装 VLC 视频播放器的过程…

Selenium教程__截图(16)

selenium截图有两种方式 截取全屏 get_screenshot_as_file(filename):将截图转化成文件保存到本地,filename为保存的文件路径get_screenshot_as_base64():将截图转化成base64get_screenshot_as_png():将截图转化成png 截取指定元…

Java学习记录之struts2(一)

1 struts入门 1.1 介绍  框架:就是半成品,框架已经完成一些通用功能。只需要实现与业务有关功能。  版本:struts-2.3.15.3-all 1.2 核心功能 1.3 目录结构  apps / struts2-blank.war 最简答环境  apps / struts2-showcase.war 常…

【Linux】MySQL 主从复制与读写分离

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 MySQL 主从复制与读写分离 MySQL 主从复制与读写分离1、什么是读写分离2、为什么要读写分离3、什么时候要读写分离4、主从复制与读写分离5、mysql支持的复制类型6、主从复制的…

Unity Android启动子进程加载其他SDK

1、导出untiy 安卓工程 添加MyService 2、 在子进程内加载SDK部分

【C#】错误 14 “GenerateResource”任务意外失败。

问题描述 Microsoft Visual Studio Ultimate 2013 12.0.21005.1 错误 14 “GenerateResource”任务意外失败。 System.Runtime.InteropServices.ExternalException (0x80004005): GDI 中发生一般性错误。在 System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder,…

开车适合佩戴哪种蓝牙耳机,分享几款骨传导耳机的使用体验

骨传导耳机从发布到现在有了几年的时间,也有很多人开始了解,但真正去选购的人还是很少,如果你没有使用过骨传导耳机,在选购时会很迷茫。作为一个骨传导耳机的重度使用者,下面就给大家分享一下我的体验感受以及选购建议…

大模型微调实践遗留问题1

Lora 和 AdaLora的区别和联系? P-tuning和Prompt tuning的区别和联系? P-Tuning,仅对大模型的Embedding加入新的参数。 P-Tuning-V2,将大模型的Embedding和每一层前都加上新的参数。 Prompt Tuning 方式可以看做是 Prefix Tuni…

自学黑客(网络安全),一般人我劝你还是算了吧(自学网络安全学习路线--第十二章 无线网络安全下)【建议收藏】

文章目录 一、自学网络安全学习的误区和陷阱二、学习网络安全的一些前期准备三、自学网络安全学习路线一、无线局域网安全性分析1、Wi-Fi网络安全2、WEP存在如下弱点: 二、移动通信网安全防护1、3G安全体系趋于透明化2、考虑采用公钥密码体系3、考虑新密码技术的应用…

kafka入门,生产者自定义分区(六)

1、实现Partitioner接口 package com.longer.producer;import org.apache.kafka.clients.producer.Partitioner; import org.apache.kafka.common.Cluster;import java.util.Map;/*** 实现接口Partitioner* 实现3个方法:partition,close,configure* 编写…

EasyCVR级联后上级在线,请求播放显示端口不可达是什么原因?

EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,比如:视…

TestNG单元测试报错Software caused connection abort: socket write error

在用TestNG进行单元测试时,总出现如下错误:Software caused connection abort: socket write error 解决方法: 报错前我使用的eclipse testng插件版本为6.11,对插件版本降为6.8后此问题解决。(先卸载已装testng插件&…