XSLT学习一——元素上

      XSLT是XSL(Extensible Stylesheet Language)转换,是XML文档转换语言,通过将XML文档转换成能够显示的格式,以达到指定样式的目的。XSLT是XSL的一部份,它是XML的一种应用,指定将一篇XML文档转换成另一种XML文档的规则。XSLT文档即是一篇XML文档,也是一个样式表,里面包含一系列的模板。XSLT处理器对输入XML文档中的元素和样式表中的模板进行比较,如果匹配,则将该模板的内容写入一个输出树中。完成处理后,将输出树串行化成一篇XML文档或其它格式的文档,如HTML。

      1、根元素

      xsl:stylesheet根元素,XSLT也是一个XML文档,该文档的根元素就是xsl:stylesheet.XSLT元素都属于名称空间xmlns:xsl=http://www.w3.org/1999/XSL/Transform。stylesheet至少指定smlns和version属性。

    <?xml version="1.0" encoding="utf-8"?>
<
xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
</
xsl:stylesheet>

      transform跟xsl:stylesheet一样

    <?xml version="1.0" encoding="utf-8"?>
<
transform xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0">
</
transform>
    

      2、顶级元素

     xsl:attribute-set元素可创建命名的属性集。该属性集(attribute-set)可作为整体应用到输出文档。

   <xsl:attribute-set name="font">
<
xsl:attribute name="fname">Arial</xlt:attribute>
<
xsl:attribute name="size">14px</xlt:attribute>
<
xsl:attribute name="color">red</xlt:attribute>
</
xsl:attribute-set>

     xsl:attribute-set有两个属性name是必需属性,use-attribute-sets是可选属性,在该属性集中使用的其它属性集的列表,由空格分隔。

    

     xsl:decimal-foramt元素定义当通过format-number()函数把数字转换味字符时,所要使用的字符和符号。

属性 描述
name name 可选。为此格式规定名称。
decimal-separator char 可选。规定小数点字符。默认是 "."。
grouping-separator char 可选。规定千的分隔字符。默认是 ","。
infinity string 可选。规定用来表示无穷大的字符串。默认是 "Infinity"。
minus-sign char 可选。规定表示负数的字符。默认是 "-"。
NaN string 可选。规定当值不是数字时使用的字符串。默认是 "NaN"。
percent char 可选。规定百分比符号的字符。默认是 "%"。
per-mille char 可选。规定千分号的字符。默认是 "‰"。
zero-digit char 可选。规定数字 0 的字符。默认是 "0"。
digit char 可选。规定字符,该字符用于指示需要使用数字的地方。默认是 #。
pattern-separator char. 可选。规定字符,该字符用于分隔格式模式中的正负次模式。默认是 ";"。
<?xml version="1.0" encoding="utf-8"?>
<
xsl:stylesheet xmlns:xlt="http://www.w3.org/1999/XSL/Transform" version="1.0">
<
xsl:decimal-format name="euro" decimal-separator="," grouping-separator="."/>

<
xsl:template match="/">
<
xsl:value-of select="format-number(26825.8, '#.###,00', 'euro')"/>
</
xsl:template>
</
xsl:stylesheet>

输出结果为:26.825,80

 

         xsl:import是对其他xlst的导入,通过import在该xslt使用其他xlst的内容,可以做到xslt的重用。

<?xml version="1.0" encoding="utf-8"?>
<
xsl:stylesheet xmlns:xlt="http://www.w3.org/1999/XSL/Transform" version="1.0">
<
xsl:import href="ImportXSLT.xslt"/>

<
xsl:template match="/">
<
h2>Import Test</h2>
<
xlt:call-template name="ImportName"/>
</
xsl:template>

</
xlt:stylesheet>
另一个xslt文件:
<?xml version="1.0" encoding="utf-8"?>
<
xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<
xsl:template match="/" name="ImportName">
<
div>Imported Content</div>
</
xsl:template>
</
xsl:stylesheet>

输出结果为:<h2>Import Test</h2>

                 <div>Imported Content</div>

        

      xsl:include元素是把一个xslt中的内容包含到另一个样式表中。被包含的样式表(included style sheet)拥有与包含的样式表(including style sheet)相同的优先级。

<?xmlversion="1.0" encoding="utf-8"?>
<
xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <
xsl:templatematch="/">
        <
xsl:for-eachselect="COLLECTION/BOOK">
            <
xsl:apply-templatesselect="TITLE"/>
            <
xsl:apply-templatesselect="AUTHOR"/>
            <
xsl:apply-templatesselect="PUBLISHER"/>
            <
BR/>
            <!--
add this-->
        </
xsl:for-each>
    </
xsl:template>

    <
xsl:templatematch="TITLE">
        <
DIVSTYLE="color:blue">
          
Title: <xsl:value-ofselect="."/>
        </
DIV>
    </
xsl:template>

    <
xsl:includehref="IncludeXSLT.xslt" />
</
xsl:stylesheet>

被包含的XSLT:

<?xml version="1.0" encoding="utf-8"?>
<
xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<
xsl:template match="TITLE">
Title - <xsl:value-of select="."/><BR/>
</
xsl:template>

<
xsl:template match="AUTHOR">
Author - <xsl:value-of select="."/><BR/>
</
xsl:template>

<
xsl:template match="PUBLISHER">
Publisher - <xsl:value-of select="."/><BR/>
</
xsl:template>
</
xsl:stylesheet>

使用的XML:

<?xml version="1.0" encoding="utf-8" ?>
<
COLLECTION>
<
BOOK>
<
TITLE>Lover Birds</TITLE>
<
AUTHOR>Cynthia Randall</AUTHOR>
<
PUBLISHER>Lucerne Publishing</PUBLISHER>
</
BOOK>
<
BOOK>
<
TITLE>The Sundered Grail</TITLE>
<
AUTHOR>Eva Corets</AUTHOR>
<
PUBLISHER>Lucerne Publishing</PUBLISHER>
</
BOOK>
<
BOOK>
<
TITLE>Splish Splash</TITLE>
<
AUTHOR>Paula Thurman</AUTHOR>
<
PUBLISHER>Scootney</PUBLISHER>
</
BOOK>
</
COLLECTION>

结果显示:

image

取消包含:

<!--<xsl:include href="IncludeXSLT.xslt" />-->

结果为:

image 

说明被包含的xslt跟包含的xlst有同等的优先权。可以替换包含xslt的定义。

 

        xsl:key元素声明一个命名的键,即为XML文档中指定的元素分配的名称和值对,此键通过key()函数在xslt中使用,可以优先地在复杂的XML访问分配的元素.

<?xml version="1.0" encoding="utf-8"?>
<
xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<
xsl:key name="preg" match="person" use="@type"/>

<
xsl:template match="/">
<
html>
<
body>
<
xsl:for-each select="key('preg','1')">
<
p>
Type: <xsl:value-of select="@type"/><br />
Name: <xsl:value-of select="@name"/>
</
p>
</
xsl:for-each>
</
body>
</
html>
</
xsl:template>

</
xsl:stylesheet>

XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<
persons>
<
person name="Tarzan" type="1"/>
<
person name="Donald" type="2"/>
<
person name="Dolly" type="3"/>
<
person name="David" type="1"/>
</
persons>

结果显示:

image

 

        xsl:namespace-alias元素用于在输出中把样式表中的命名空间替换为不同的命名空间,也就是使用其他前缀替换于给定命名空间关联的前缀。

<?xml version="1.0" encoding="utf-8"?>
<
xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wxsl="http://www.w3school.com.cn/w3style.xsl">

<
xsl:namespace-alias stylesheet-prefix="wxsl" result-prefix="xsl"/>

<
xsl:template match="/">
<
wxsl:stylesheet>
<
xsl:apply-templates/>
</
wxsl:stylesheet>
</
xsl:template>

</
xsl:stylesheet>

         

       xsl:output元素定义输出文档的格式。

属性 描述
method
  • xml
  • html
  • text
  • name
可选。定义输出的格式。默认是 XML。Netscape 6 仅支持 "html" 和 "xml"。
version string 可选。设置输出格式的 W3C 版本号。(仅在 method="html" or method="xml" 时使用)。
encoding string 可选。设置输出中编码属性的值。
omit-xml-declaration
  • yes
  • no
可选。 "yes" 规定在输出中省略 XML 声明 (<?xml...?>)。 "no" 规定应在输出中包含 XML 声明。默认是 "no"。
standalone
    • yes
    • no
可选。规定 XSLT 处理器是否应输出独立文档声明;该值必须为 yes 或 no。默认是 "no"。Netscape 6 不支持该属性。
doctype-public string 可选。规定 DTD 中要使用的公共标识符。即输出中 DOCTYPE 声明的 PUBLIC 属性的值。
doctype-system string 可选。规定 DTD 中要使用的系统标识符。即输出中 DOCTYPE 声明的 SYSTEM 属性的值。
cdata-section-elements namelist 可选。一个空格分隔的元素列表,这些元素的文本内容应作为 CDATA 部分来输出。
indent
  • yes
  • no
可选。在输出结果树时是否要增加空白;该值必须为 yes 或 no。Netscape 6 不支持该属性。
media-type string 可选。定义输出的 MIME 类型(数据的媒体类型)。默认是 "text/xml"。Netscape 6 不支持该属性。

       如果没有 <xsl:output> 元素或没有 <xsl:output> 元素指定了 method 属性的值,应使用默认的输出方法。

 

      xsl:param元素用于声明局部或全局参数。如果在XSLT内声明参数,就是局部参数,如果作为顶层元素来声明,就是全局参数,这跟许多编程语言类似。

<?xml version="1.0" encoding="utf-8"?>
<
xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<
xsl:variable name="xx">
<
html>
<
body>
<
xsl:call-template name="show_title">
<
xsl:with-param name="title" />
</
xsl:call-template>
</
body>
</
html>
</
xsl:variable>

<
xsl:template name="show_title" match="/">
<
xsl:param name="title" />
<
xsl:for-each select="catalog/cd">
<
p>
Title: <xsl:value-of select="$title" />
</
p>
</
xsl:for-each>
</
xsl:template>
</
xsl:stylesheet>

     xsl:preserve-space元素用于定义保留空白的元素;xsl:strip-space元素用于定义删除空白的元素。保留空白是默认的设置,所以只有当使用xsl:stript-space元素时才有必要使用xsl:preserve-space元素。

 

      xsl:template元素包含了当匹配指定节点是要应用的规则。match属性用于把XSLT关联到某个XML元素。

<?xml version="1.0" encoding="utf-8"?>
<
xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<
xsl:template match="/">
<
html>
<
body>
<
h2>My CD Collection</h2>
<
xsl:apply-templates/>
</
body>
</
html>
</
xsl:template>

<
xsl:template match="cd">
<
p>
<
xsl:apply-templates select="title"/>
<
xsl:apply-templates select="artist"/>
</
p>
</
xsl:template>

<
xsl:template match="title">
Title: <span style="color:#ff0000">
<
xsl:value-of select="."/>
</
span>
<
br />
</
xsl:template>

<
xsl:template match="artist">
Artist: <span style="color:#00ff00">
<
xsl:value-of select="."/>
</
span>
<
br />
</
xsl:template>

</
xsl:stylesheet>

      xsl:variable元素用于声明局部或全局的变量。如果被声明为顶层元素,则该变量是全局的,如果是在内部,则是局部的。一旦设置啦变量的值,将无法修改变量的值。

    <xsl:variable name="color" select="'red'"/>
<
xsl:variable name="size">25px</xsl:variable>

      xsl:variable的作用是定义一个值可以多次使用,还有就是根据条件设置变量的值。

    <xsl:variable name="typename">
<
xsl:choose>
<
xsl:when test="@type=1">
类型一
</xsl:when>
<
xsl:when test="@type=2">
类型二
</xsl:when>
</
xsl:choose>
</
xsl:variable>

      以上是xslt的根元素和顶级元素,指令元素到下一篇

posted @ 2009-11-26 23:37  Asharp  阅读(1624)  评论(0编辑  收藏  举报