XML学习笔记——XSL
XSL
.XSL文件
說(shuō)明
經(jīng)常看到.xsl文件,那么什么是xsl呢?即可擴(kuò)展樣式單語(yǔ)言(extensible stylesheet language)。它是由W3C制定的。說(shuō)到樣式語(yǔ)言,我們想起CSS,類似與CSS,XSL是XML的專屬樣式語(yǔ)言。
xsl與css的不同
css是一種靜態(tài)的樣式描述格式,其本身不遵從XML的語(yǔ)法規(guī)范。另外,css還有很多局限。而xsl不同,他是通過(guò)XML進(jìn)行定義的,遵從XML的語(yǔ)法規(guī)則,是XML的一種具體應(yīng)用。
簡(jiǎn)而言之,XSL本身也是一個(gè)XML文檔,系統(tǒng)可以使用同一個(gè)XML解釋器對(duì)XML文檔極其相關(guān)的XSL文檔進(jìn)行解釋處理。
組成
XSL實(shí)際上包含三種語(yǔ)言。
- XSLT是一種轉(zhuǎn)換XML的語(yǔ)言,即將XML文檔轉(zhuǎn)換城其他類型文檔或其他XML文檔的語(yǔ)言
- XPATH是一種定義XML部分或模式的語(yǔ)言,即對(duì)XML文檔的部分進(jìn)行尋址的語(yǔ)言
- XSL格式化對(duì)象是一種定義XML顯示方式的語(yǔ)言,即將一個(gè)XSL轉(zhuǎn)換結(jié)果變成適合讀者或聽眾使用的輸出格式的過(guò)程
這三種語(yǔ)言構(gòu)成XSL的兩大部分。
- 第一部分描述了如何將一個(gè)XML文檔進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換為可瀏覽或可輸出的格式
- 第二部分則定義了格式化對(duì)象。
原理:在輸出的時(shí)候,首先將XML文檔根據(jù)給定的XSL轉(zhuǎn)換為可以顯示的結(jié)構(gòu),這個(gè)過(guò)程成為轉(zhuǎn)換。最后再按照FO解釋,產(chǎn)生一個(gè)可以在屏幕上、紙質(zhì)介質(zhì)上、語(yǔ)音設(shè)備或者其他媒體中可以輸出的結(jié)果,這個(gè)過(guò)程稱為格式化。
使用XSL顯示XML
XML的樹狀結(jié)構(gòu)
XML文檔是以根元素為根節(jié)點(diǎn)的一個(gè)樹狀結(jié)構(gòu)。所謂樹狀結(jié)構(gòu),就是由相互連接的節(jié)點(diǎn)組成,這些節(jié)點(diǎn)實(shí)際上是XML文檔中元素及其內(nèi)容。在樹狀結(jié)構(gòu)中,根節(jié)點(diǎn)與子節(jié)點(diǎn)相連接,而子節(jié)點(diǎn)又有他們自己的子節(jié)點(diǎn),樹狀結(jié)構(gòu)最重要的性質(zhì)是每個(gè)節(jié)點(diǎn)與其子節(jié)點(diǎn)也構(gòu)成一個(gè)樹狀結(jié)構(gòu)名如此一來(lái),每個(gè)樹狀結(jié)構(gòu)都可以看作是由一些曉得樹狀結(jié)構(gòu)按照層次結(jié)構(gòu)組成。
XSLT
XSLT是XSL中最重要的部分,其主要功能是轉(zhuǎn)換。它將一個(gè)沒有形式表現(xiàn)的XML內(nèi)容文檔作為一個(gè)源樹,將其轉(zhuǎn)換為一個(gè)有樣式信息的結(jié)果樹。在XSLT中定義了與XML文檔中各個(gè)邏輯成分相匹配的模版,以及匹配轉(zhuǎn)換方式。
XSLT基本思想
通過(guò)定義轉(zhuǎn)換模版,將XML源文檔轉(zhuǎn)換為帶樣式信息的可瀏覽文檔。最終的可瀏覽文檔可以是HTML格式、FO格式或者其他面向顯示方式藐視的XML格式。
XSLT名稱空間
在很多XSL的開頭我們常常看到這樣的語(yǔ)句
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">為了解釋這個(gè)東西,我們尋根到這個(gè)網(wǎng)站http://www.w3.org/1999/XSL/Transform
里面有一句話:
The namespace http://www.w3.org/1999/XSL/Transform is referred to as “the XSLT namespace”. The prefix xsl is conventionally used to refer to this namespace (and is so used both within this document and within the XSLT specification), but it has no special status: any prefix may be used.
大概的意思是http://www.w3.org/1999/XSL/Transform這個(gè)名稱空間代表XSLT的名稱空間(namespace),所用的前綴(prefix)是xsl,通常使用xsl這個(gè)前綴來(lái)引用xslt的名稱空間,比如:
- xsl:stylesheet 就代表引用了xslt的名稱空間,并且使用了當(dāng)中的stylesheet根元素。
后半句的意思是xsl這個(gè)前綴不是特定的,可以使用其他任何前綴。
XSLT元素
這里引用http://www.w3.org/1999/XSL/Transform名稱空間里面的定義
The namespace name http://www.w3.org/1999/XSL/Transform is used primarily to identify elements which serve as declarations or instructions in the XSLT language. The full list of element names used in XSLT 3.0 is:
xsl:accept xsl:accumulator xsl:accumulator-rule xsl:analyze-string xsl:apply-imports xsl:apply-templates xsl:assert xsl:attribute xsl:attribute-set xsl:break xsl:call-template xsl:catch xsl:character-map xsl:choose xsl:comment xsl:context-item xsl:copy xsl:copy-of xsl:decimal-format xsl:document xsl:element xsl:evaluate xsl:expose xsl:fallback xsl:for-each xsl:for-each-group xsl:fork xsl:function xsl:global-context-item xsl:if xsl:import xsl:import-schema xsl:include xsl:iterate xsl:key xsl:map xsl:map-entry xsl:matching-substring xsl:merge xsl:merge-action xsl:merge-key xsl:merge-source xsl:message xsl:mode xsl:namespace xsl:namespace-alias xsl:next-iteration xsl:next-match xsl:non-matching-substring xsl:number xsl:on-completion xsl:on-empty xsl:on-non-empty xsl:otherwise xsl:output xsl:output-character xsl:override xsl:package xsl:param xsl:perform-sort xsl:preserve-space xsl:processing-instruction xsl:result-document xsl:sequence xsl:sort xsl:source-document xsl:strip-space xsl:stylesheet xsl:template xsl:text xsl:transform xsl:try xsl:use-package xsl:value-of xsl:variable xsl:when xsl:where-populated xsl:with-param
XSL語(yǔ)法
根元素
<xsl:stylesheet version='1.0' xmlns:xsl="http://www.w3.org/1999/WSL/Transform"></xsl:stylesheet>該元素的作用是聲明XSLT的開始。兩個(gè)常用屬性
- version 表示XSLT的版本序號(hào)
- xmlns表明XSLT所使用的命名空間
模版元素
一個(gè)XSL文檔主要是由一系列模版規(guī)則構(gòu)成,一條模版規(guī)則有一個(gè)模式,該模式指定了它能夠作用的樹狀結(jié)構(gòu)。當(dāng)模式匹配時(shí)就會(huì)按照模版樣式輸出。模式匹配是指XSL處理器在掃描XML文檔的時(shí)候,回一次遍歷該文檔樹狀結(jié)構(gòu)中國(guó)的每一棵子樹,在這個(gè)過(guò)程中,處理器試圖找到與模版規(guī)則中的模式相符合的子樹,如果找到,則將模版規(guī)則應(yīng)用到這棵子樹。
模版規(guī)則,即一個(gè)xsl:template元素,該元素定義了將原文檔轉(zhuǎn)換到結(jié)果樹所需要的一系列規(guī)則。其中有一個(gè)match屬性,用于指示一種模式,可以找到應(yīng)用該規(guī)則的節(jié)點(diǎn)。
實(shí)例:
<xsl:template match="employee"><xsl:apply-templates select="name"/> </xsl:template>< xsl:template match=”employee”>這個(gè)模板匹配employee節(jié)點(diǎn),告訴處理器處理employee節(jié)點(diǎn)的所有子節(jié)點(diǎn)。
select=”name”,select屬性告訴處理器只處理employee節(jié)點(diǎn)下的name子節(jié)點(diǎn)。
在XSL中套用模版
使用以下語(yǔ)句
<xsl:apply-templates select="xml_element_name"/>當(dāng)要選擇的是屬性里的數(shù)據(jù)時(shí),使用
<xsl:apply-templates select="@xml_atrribute_bane"/>xsl:apply-templates元素的作用是告訴XSL處理器,如果有子元素,則要對(duì)子元素進(jìn)行解析,即對(duì)指定的XML文檔子元素應(yīng)用相應(yīng)的模版規(guī)則,而指定子元素則由該元素的select屬性值表示。
選取XML文檔中的數(shù)據(jù)
在使用XSL對(duì)XML文檔進(jìn)行轉(zhuǎn)換時(shí),首先需要獲取XML元素或?qū)傩缘膬?nèi)容,這通過(guò)內(nèi)容元素的xsl:value-of來(lái)實(shí)現(xiàn),同時(shí)用該元素所帶有的select屬性來(lái)指定XML元素名稱,由此構(gòu)成的XSL語(yǔ)句即可完成對(duì)XML文檔轉(zhuǎn)換時(shí)要選取數(shù)據(jù)的任務(wù)。
使用XSL顯示XML
在XML文檔中應(yīng)該添加如下聲明才能顯示XSL的模版效果
<?xml-stylesheet type="text/xsl" href="xsl-uri"?>xsl-uri代表該樣式表的名稱與路徑,如”char05.xsl”
其他
關(guān)于XSLT的細(xì)節(jié)內(nèi)容,可以訪問(wèn)官方網(wǎng)站XSLT 2.0版本的教程介紹
https://www.w3.org/TR/xslt20/
附錄
XML編輯器推薦:XMLSpy
總結(jié)
以上是生活随笔為你收集整理的XML学习笔记——XSL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 解决element-ui 的 Notif
- 下一篇: XSL转换XML