学习XSLT(一)
??????先看一段XML文檔 XML
<?xml?version="1.0"?encoding="utf-8"??>
<Authors>
??<Author>
????<AuthorName?id="1">Author1</AuthorName>
????<AuthorAddress>Address1</AuthorAddress>
????<AuthorEmail>EMail1</AuthorEmail>
??</Author>
??<Author>
????<AuthorName?id="2">Author2</AuthorName>
????<AuthorAddress>Address2</AuthorAddress>
????<AuthorEmail>EMail2</AuthorEmail>
??</Author>
??<Author>
????<AuthorName>Author3</AuthorName>
????<AuthorAddress>Address3</AuthorAddress>
????<AuthorEmail>EMail3</AuthorEmail>
??</Author>
</Authors> ??????這段文檔經(jīng)過(guò)下面的XSLT文件 <?xml?version="1.0"?encoding="utf-8"?>
<xsl:stylesheet?version="1.0"
????xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
??<xsl:output?method="xml"/>
??<xsl:template?match="/">
????<html>
??????<body>
????????<table?border="1px">
????????<xsl:apply-templates/>
????????</table>
??????</body>
????</html>
??</xsl:template>
??<xsl:template?match="Author">
????<xsl:value-of?select="."/>
??</xsl:template>
</xsl:stylesheet> 轉(zhuǎn)換會(huì)得到下面的xml文件 Result
<?xml?version="1.0"?encoding="utf-8"?>
<html>
??<body>
????<table?border="1px">
??????Author1
??????Address1
??????EMail1
??????Author2
??????Address2
??????EMail2
??????Author3
??????Address3
??????EMail3
????</table>
??</body>
</html>
對(duì)于這個(gè).xsl文件:
<xsl:stylesheet>和<xsl:stylesheet>表示這個(gè)文檔是XSLT樣式表,version自然代表使用的版本,xmlns:xsl是標(biāo)準(zhǔn)的XML命名空間聲明。所有的XSLT文檔必須使用這個(gè)URI作為命名空間前綴。當(dāng)然可以定義自己的命名空間,這樣可以避免不同的元素,屬性命名的沖突。當(dāng)然xsl是習(xí)慣性的前綴,比較容易理解。也可以使用自定義的前綴名。
<xsl:output method="xml/>用于控制XSLT轉(zhuǎn)換的輸出格式(可以指定為xml.html.text),還有其他的可選屬性(如version來(lái)指明輸出xml文檔的版本 Encoding指定編碼方式)。
<xsl:template match="/"></xsl:template>定義XSLT模板規(guī)則,是XSLT中最主要的部分。XSLT代碼最終的目的是將XML文檔按照模板定義的規(guī)則進(jìn)行輸出。屬性match用來(lái)指定匹配的模式,"/"代表選擇根節(jié)點(diǎn),返回的將是根節(jié)點(diǎn)后代的集合,具體語(yǔ)法將在下一篇文章中介紹。其它可選屬性如name可以定義模板的名字,priority定義模板的優(yōu)先級(jí),mode定義模板的模式。???????????????name:作為一個(gè)模板的標(biāo)識(shí),就像一個(gè)人的名字。如果我們指定一個(gè)模板的name="NameXX"那么我們可以通過(guò)<xsl:call-template name="NameXX"/>來(lái)調(diào)用它。本例中<xsl:apply-templates/>就可以用<xsl:call-template name="NameXX"/>代替。???????????????priority指定模板的優(yōu)先級(jí)。??????????????????mode:相當(dāng)于選擇的作用,如果一個(gè)模板的mode被設(shè)定為"Y",那么<xsl:apply-templates mode="X"/>只會(huì)選擇與X同名的template,mode值為其它的template將不會(huì)得到使用。
<xsl:value-of select="."/>是選擇當(dāng)前節(jié)點(diǎn)的值。因?yàn)?#34;."匹配當(dāng)前節(jié)點(diǎn),返回值為當(dāng)前節(jié)點(diǎn)以及其子節(jié)點(diǎn)集,所以所有的子節(jié)點(diǎn)值會(huì)被選擇出來(lái)。
其他的樣式表元素將在第二篇文章中介紹包括xsl:include,xsl:attibute-set,xsl:key,xsl:variable,xsl:param,xsl:if,xsl:when,xsl:otherwise,xsl:choose等!
如果有寫(xiě)的不好的地方希望大家提出來(lái),誠(chéng)懇的接受批評(píng)指導(dǎo)。大家互相交流,共同提高!
轉(zhuǎn)載于:https://www.cnblogs.com/jingtao/archive/2007/07/27/833773.html
總結(jié)
- 上一篇: 4001234567是什么保险
- 下一篇: u盘变成了本地磁盘怎么恢复 U盘变本地磁