精华内容
参与话题
问答
  • XSLT简单教程--XSLT的实例

    万次阅读 2006-09-14 11:27:00
    XSLT如何转换XML我们打个有趣的比方,你玩过橡皮泥吧,用不同的模子按上去,就可以做出需要的形状。如果我们假设XML数据文档是一块大橡皮泥,XSLT就象是一个模子,用力一按,就做出需要的形状来---符合不同需要的...

    XSLT如何转换XML

    我们打个有趣的比方,你玩过橡皮泥吧,用不同的模子按上去,就可以做出需要的形状。如果我们假设XML数据文档是一块大橡皮泥,XSLT就象是一个模子,用力一按,就做出需要的形状来---符合不同需要的HTML文档。

    具体看下面的过程示意图:

    图1

    我们将XML原文档输入,用XSL作为模板,通过转换引擎,最终输出需要的HTML文档。其中的转换引擎就是比喻中"用力一按"的过程。在具体应用中,有专门的软件来实现这个转换过程,名为XML Processor。目前已经有很多 Processor 软件(下面将详细提到),在IE5.5中也已经内嵌了XML Processor。

    一个实例

    现在我们来看一个简单的XSLT实际应用例子,获得一些感官上的认识。很多网页设计师看到类似HTML的代码才会放心,代码是那样的亲切和熟悉。

    例子1: "Hello, world!"

    hello world作为第一个教程已经是程序语言中的惯例了。我们也遵守这个惯例,看看如何利用XSLT来显示"hello world"。虽然这个例子没有什么实际用途,但是请大家不要急,后面还有更详细的例子。

    第一步:建立要输入XML文档hello.xml。

    <?xml version="1.0" encoding="iso-8859-1"?>
    
    <greeting>Hello, world!</greeting>
    

    这是一个很简单XML文档,只包含一个节点的XML结构树。

    第二步:建立XSLT文档hello.xsl。提示:默认的XSLT文件的后缀名为.xsl。

    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
    <xsl:template match="/">
    
    <html>
    
    <head>
    
    <title>First XSLT example</title>
    
    </head>
    
    <body>
    
    <p><xsl:value-of select="greeting"/></p>
    
    </body>
    
    </html>
    
    </xsl:template>
    
    </xsl:stylesheet>
    

    你现在可以用IE5.0以上版本浏览器打开这个hello.xsl文件,看到XSL的结构树。

    第三步:在XML中调用这个XSL文件。修改hello.xml的代码为:

    <?xml version="1.0" encoding="iso-8859-1"?>
    
    <?xml-stylesheet type="text/xsl" href="hello.xsl"?>
    
    <greeting>Hello, world!</greeting>
    

    OK,到这一步原理上已经完成了所有的代码,接下来只要用一个XSLT的处理器(XML Processor)来执行hello.xml就可以看到"hello world"的显示结果了。流行的处理器软件有以下几种:

    • James Clark的XT。下载网址:http://www.jclark.com/xml/xt.html
    • IBM的XML for Java软件包,名为LotusXSL。下载网址:www.alphaworks.ibm.com/tech/xml4j
    • Saxon。下载网址:http://www.wrox.com
    • 微软的MSXML3。下载网址:http://www.microsoft.com/xml

    有网友要问,我想在浏览器中看到"hello world"的效果应该怎么做?在微软的IE5.5内嵌了MSXML3解释器,你可以用IE5.5打开hello.xml文件,就可以看到结果。如果只看到XML结构树,不是单独的"hello world"字样,说明你的浏览器没有安装MSXML3版本。

    如果没有安装又想看效果怎么办?那还是用我们在XML教程中的老办法,采用JS实现。(这已经超出了本文要讲的范围,但为了更加直观,便于理解,我们在这里提供实例代码。)下面是一种实现的代码,可以保存为hello.htm,和上面的hello.xml,hello.xsl放在同一目录下面。最后用IE5.0以上版本打开hello.htm就可以看到效果了。

    <html>
    
    <head>
    
    <script language="JavaScript" for="window" event="onload">
    
    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    
    xmlDoc.async="false";
    
    xmlDoc.load("hello.xml");
    
    nodes = xmlDoc.documentElement.childNodes;
    
    greeting.innerText = nodes.item(0).text;
    
    </script>
    
    <title>First XSLT Example</title>
    
    </head>
    
    <body>
    
    <span id="greeting"></span><br/>
    
    </body>
    
    </html>
    

    过程解析

    如果你成功的看到效果,你也许想知道这些代码的具体含义,我们来详细解说hello.xsl文件

    <?xml version="1.0" encoding="iso-8859-1"?>
    
    这是标准的XML文档的首行代码,因为XSLT本身也是XML文档。
    encoding属性用来定义文档使用的编码形式,iso-8859-1主要支持西欧和北美的语言编码。
    如果你想使用简体中文,那么就应该写成:
    
    <?xml version="1.0" encoding="GB2312"?>
    
    接下去的代码是:
    
    <xsl:stylesheet
    
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    
    version="1.0">
    
    这是标准的XSLT文件首行代码。xsl:stylesheet代码的意思是将文档作为一个样式表来(stylesheet)处理。
    xmlns:xsl属性是一个名字空间声明,和XML中的名字空间使用方法一样,用来防止元素名称重复和混乱。
    其中前缀xsl的意思是文档中使用的元素遵守W3C的XSLT规范。
    最后的version属性说明样式表只采用XSLT 1.0的标准功能,这也是目前仅有的标准。
    
    <xsl:template match="/">
    
    一个<xsl:template>元素定义一个模板规则。属性match="/"说明XML源文档中,这个模板规则作用的起点。"/"是一种XPath语法,我们在后面将详细讲述,这里的"/"代表XML结构树的根(root)。
    
    接下去的代码是:
    
    <html>
    
    <head>
    
    <title>First XSLT Example</title>
    
    </head>
    
    <body>
    
    <p><xsl:value-of select="greeting"/></p>
    
    </body>
    
    </html>
    
    说明:当模板规则被触发,模板的内容就会控制输出的结果。例子中,模板大部分内容由HTML元
    素和文本构成。只有<xsl:value-of>元素是XSLT语法,这里<xsl:value-of>的作用是拷贝原文档中的
    一个节点的值到输出文档。而select属性则详细指定要处理的节点名称。这是XPath语法,"greeting"
    的意思就是寻找根节点名为greeting的元素,并用模板来处理这个节点。具体的就是找到<greeting>
    元素,然后将元素的值"hello world"按模板样式拷贝到输出文件。 
    
    提示:由于XML文档是严格的层级结构(用IE5查看XML文件,会看见XML文档类似多级关联菜单),
    所以我们形象的称XML文档为文档树,其中每一对元素称作树的一个节点。根元素就是根节点。
    
    最后关闭所有元素:
    
    </xsl:template>
    
    </xsl:stylesheet>
    

    好,例子解说完毕。你是否想过为什么要用这么复杂的方法来显示"hello world"呢?关键不在表面,而在于实质:用这种方法,hello world可以从XML文档中被提取出来,并用各种不同的XSLT模板处理,来输出不同需求的文档。我们来看看XSLT的主要用途:

    XSLT的用途

    XSLT的主要用途就是数据转换应用。

    由于以XML为基础的电子商务广泛普及,XSLT作为数据转换的角色也越来越重要。例如直接将电视新闻的数据格式转换成报纸新闻需要的数据格式;将股票数据直接转换成图片显示在网页上;对EDI(电子数据交换)数据进行统计,排序等等。

    XSLT是处理类似工作的理想工具。

     
    展开全文
  • [XML]学习笔记(八)XSLT

    千次阅读 2016-05-20 00:45:59
    一、XSL(eXtensible Stylesheet Language)扩展样式表语言:主要包含三个部分——XSLT用于XML文档转换,XPath用于在XML文档中导航,XSL-FO用于XML文档格式化。 注意:XSL样式表本身也是一个XML文档,所以第一行必须为...
    一、XSL(eXtensible Stylesheet Language)扩展样式表语言:主要包含三个部分——XSLT用于XML文档转换,XPath用于在XML文档中导航,XSL-FO用于XML文档格式化。

    注意:XSL样式表本身也是一个XML文档,所以第一行必须为XML声明。


    二、XSLT = XSLTransformations XSL转换,可将一种XML文档转换为另一种XML文档,或者说XSLT将XML源树转换为XML结果树,通过使用XPath来定义源文档中可匹配一个或多个预定义模板部分,一旦匹配被找到,XSLT就会调用模板将源文档中的匹配部分转换为结果文档。


    三、XSLT是一种闭包,它的输入和输出都是树,可以管道化利用,如:文档1 -> 文档2-> 文档3。


    四、XSLT语法:XSL样式表由一个或多个模板(template)的规则组成,每个模板含有当前某个指定节点被匹配时所应用的规则。

    a) <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">元素

    XSLT的根元素,用于定义该文档是一个XSLT样式表,上例中包含版本号以及XSLT命名空间两个属性。其中stylesheet也可写为transform,两者是完全相同的。
    b) <xsl:import href="sourcePath"/>和<xsl:import href="sourcePath"/>
    在根元素下,第一个<xsl:template>之前植入,用于直接引用外部的其他xsl。
    区别在于当定义的规则和正文中的规则冲突时,import的规则优先级较低,include的规则优先级与正文的规则相同。
    如:原book.xsl中有
    <xsl:template match="title">
    Title
    </xsl:template>

    而另一个anotherBook.xsl中有include该文件,则NewTitle是无效的,依旧使用原模板中的Title。如果采用import,则可以覆盖原有book.xsl中的模板。
    <xsl:include href="book.xsl">
    (:<xsl:import href="book.xsl">:)
    <xsl:template match="title">
    NewTitle
    </xsl:template>

    c) <xsl:template math=”…”>元素
    每个xsl样式表中至少包含一个,用于构造模板,match属性的值是XPath表达式,用于为整个模板定义文档,其中采用”/” 表示定义整个文档。可选用属性name,该属性将在后面用于模板重用。
    d) <xsl:apply-templates select="expression" mode="name">元素
    把一个模板应用于当前元素或其子元素。
    通过select属性可以筛选匹配的元素或其子元素,*表示要选取整个节点集,省略该属性时选取当前结点的所有子节点。缺省情况下相当于select="text()",即选取文本。
    通过mode属性用来区分相同元素的不同处理方法。
    其中<xsl:apply-templates/>是默认执行该模板,当在和叶子节点相关联的模板中,可以不必写明。
    如:用对cd下的title和artist分别应用模板,模板cd、title和artist中省略了<xsl:apply-templates/>。
    <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>

    e) <xsl:value-of>元素
    用于提取某个选定节点的内容,可以是文本、元素或者属性,并把值添加到转换的输出流中。可拥有属性select,该属性的值为一个XPath表达式。
    如:下面的xsl语句选出了catalog/cd/title和catalog/cd/artist的值。
          <td><xsl:value-of select="catalog/cd/title"/></td>
          <td><xsl:value-of select="catalog/cd/artist"/></td>

    f) <xsl:for-each>元素
    用于选取指定节点集中的每个元素。与value-of类似,它也有select属性,其值也是一个XPath表达式,当然在表达式中添加谓词作为判别式也可以用来筛选元素。
    如:下面的xsl语句选出了artist为Bob Dylan的cd信息。
    <xsl:for-each select="catalog/cd[artist='Bob Dylan']">
    合法的比较运算符:= (等于),!= (不等于),&lt; (小于),&gt; (大于)
    g) <xsl:sort>元素
    用于对结果进行排序,紧跟<xsl:apply-templates>或<xsl:for-each>,是它们内部的一个元素,而不是属性。
    sort可以拥有以下属性:
    i. select="XPath",规定节点的排序关键字,即根据哪个节点/节点集排序。
    ii. lang="language",规定排序所采用的语言。
    iii. data-type = { "text" | "number" | QName },规定排序所采用的数据类型,默认为text。text是按所选节点的文本类型排序,即字典序;number则是按照所选节点的数据类型排序,如30,6,132按照text得到132,30,6,按照number得到6,30,132。
    iv. order={"ascending"|"descending"},规定排序的顺序,默认为"ascending"。
    v. case-order={"upper-first"|"lower-first"},规定是否首先按照大写/小写字母排序,比如选用了lower-first,则对于book,Book,CZ,cz排序结果为book,Book,cz,CZ。
    如:根据artist的值排序。
    	<xsl:for-each select="catalog/cd">
          <xsl:sort select="artist"/>
          <tr>
            <td><xsl:value-of select="title"/></td>
            <td><xsl:value-of select="artist"/></td>
          </tr>
          </xsl:for-each>

    h) <xsl:if>元素
    在<xsl:for-each>内部,它包含了一个“模板”,用于对XML文档内容的条件测试,只有在指定的条件成立时才会应用模板。
    有且只有一个属性test,该属性的值为一个表达式,规定了要测试的条件。
    如:找出售价大于10元的cd的名称和作者。
    	<xsl:for-each select="catalog/cd">
          <xsl:if test="price > 10">
            <tr>
              <td><xsl:value-of select="title"/></td>
              <td><xsl:value-of select="artist"/></td>
            </tr>
          </xsl:if>
          </xsl:for-each>


    以下xsl语句显示的效果是最后一张cd的title输出后面跟!,倒数第二张和最后一张cd的title之间用“,and”连接,其余用逗号连接。
    注意:xsl语句的每个if语句都会被测试!
        <xsl:for-each select="catalog/cd">
          <xsl:value-of select="title"/>
          <xsl:if test="position()!=last()">
            <xsl:text>, </xsl:text>
          </xsl:if>
          <xsl:if test="position()=last()-1">
            <xsl:text> and </xsl:text>
          </xsl:if>
          <xsl:if test="position()=last()">
            <xsl:text>!</xsl:text>
          </xsl:if>
        </xsl:for-each>


    i) <xsl:choose>元素
    与<xsl:when>和<xsl:otherwise>结合,进行多重测试。只有when元素有且只有一个test属性。
    基本语法:
    <xsl:choose>
      <xsl:when test="expression">
        ... Output ...
      </xsl:when>
    <xsl:when test="expression">
        ... Output ...
      </xsl:when>
      <xsl:otherwise>
        ... Output ...
      </xsl:otherwise>
    </xsl:choose>


    注意:when不会像if一样对一个测试点进行多次测试,好比switch-case语句加上break。
    如:一个名为color的变量,如果当前测试的元素有color属性,则将color变量的值赋给当前测试元素的color属性;否则,将color属性置为green。
    <xsl:variable name="color">
      <xsl:choose>
        <xsl:when test="@color">
          <xsl:value-of select="@color"/>
        </xsl:when>  
        <xsl:otherwise>green</xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

    j) <xsl:call-template>元素:
    <xsl:call-template name="templateName">用于实现模板重用。
    k) <xsl:number/>元素:
    用于测定当前节点在源文档中的位置,也可用于将格式化的数字插入结果树。
    i. count=”xPathExpression”:可选属性,指定要计算的节点。
    ii. level:可选属性,控制如何分配序号。
    1. single——默认,即每个序号只与所在层序号有关;
    2. multiple——每个序号包含层级关系;
    3. any——所有层共用一个序号关系。
    iii. format:格式标记,可为1数字计数,01与1唯一的区别在于01~09,a表示小写字母计数,A表示大写字母计数,i表示小写罗马数字计数,I表示大写罗马数字计数。
    iv. value:自己提供数字代替产生的序号;
    grouping-separator:规定采用什么符号来分割数字或组,默认为“,”;
    grouping-size:规定分组的大小,默认为3。
    如:
    <xsl:number value="123456" grouping-separator="." grouping-size="2"/>
    输出为12.34.56
    <xsl:number value="12" grouping-size="1" grouping-separator="#" format="I"/>
    输出为X#I#I,首先将12转换成大写罗马数字XII,然后对其进行分割。
    如源books.xml为:
    <?xml version="1.0" encoding="UTF-8"?>
    <list>
    	<book ID="666">
    		<chapter>First Chapter</chapter>
    		<chapter>Second Chapter
    			<chapter>Subchapter 1</chapter>
    			<chapter>Subchapter 2</chapter>
    		</chapter>
    		<chapter>Third Chapter
    			<chapter>Subchapter A</chapter>
    			<chapter>Subchapter B
    				<chapter> subsub a</chapter>
    				<chapter> subsub b</chapter>
    			</chapter>
    		</chapter>
    	</book>
    </list>


    目标输出为:
     
    转换的xsl为:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
    	<xsl:template match="/">
    		<xsl:for-each select="//chapter">
    			<br/>
    			<xsl:number level="multiple" format="1.A.a "/>
    			<xsl:value-of select="./text()"/>
    		</xsl:for-each>
    	</xsl:template>
    </xsl:stylesheet>


    如果将level选为single,则输出结果如下:
    1 First Chapter
    2 Second Chapter 
    1 Subchapter 1
    2 Subchapter 2
    3 Third Chapter 
    1 Subchapter A
    2 Subchapter B 
    1 subsub a
    2 subsub b
    如果将level选为any,则输出结果如下:
    1 First Chapter
    2 Second Chapter 
    3 Subchapter 1
    4 Subchapter 2
    5 Third Chapter 
    6 Subchapter A
    7 Subchapter B 
    8 subsub a
    9 subsub b
    l) <applet>属性值模板:
    如:

    <applet>
    	<code class="Applet"/>
    	<codebase>/src/code</codebase>
    </applet>
    <xsl:template match="/">
    	<xsl:apply-templates select="applet">
    		<applet code="{code/@class}" codebase="{codebase}/java"/>
    	</xsl:apply-templates>
    </xsl:stylesheet>
    

    实际效果为:

    <applet code="Applet" codebase="src/code/java"/>


    五、 XML与XSL关联:

    <?xml-stylesheet type="text/xsl" href="***.xslt"?>


    六、 XSL参数:<xsl:with-param name="…">
    定义了传递给模板的参数的值,with-param的name属性的值必须与所调用的模板的param的name属性值相匹配,否则将被忽略。call-template和apply-templates中允许使用with-param元素。可以通过元素的内容设置参数值(如例子中),也可以通过select属性赋值。
    如:
    输入repeatTest.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <Name>
    	<AAA repeat="3"/>
    	<BBB repeat="2"/>
    	<CCC repeat="5"/>
    </Name>


    转换repeatTest.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
    <xsl:template match="/Name/*">
    	<p>
    		<xsl:call-template name="while">
    			<xsl:with-param name="test">
    				<xsl:value-of select="@repeat"/>
    			</xsl:with-param>
    		</xsl:call-template>
    	</p>
    </xsl:template>
    <xsl:template name="while">
    	<xsl:param name="test"/> #test记录了repeat的次数
    	<xsl:value-of select="name()"/> #输出AAA或BBB或CCC
    	<xsl:text/>
    	<xsl:if test="$test!=1"> #判断当前repeat属性是否为1
    		<xsl:call-template name="while">
    			<xsl:with-param name="test">
    				<xsl:value-of select="$test - 1"/> #递归调用while模板,参数修正为test值减1,注意$test和-、-和1之间均有空格
    			</xsl:with-param>
    		</xsl:call-template>
    	</xsl:if>
    </xsl:template>
    </xsl:stylesheet>


    输出结果:
    AAAAAAAAA
    BBBBBB

    CCCCCCCCCCCCCCC


    七、 XSL变量:<xsl:variable name="…">
    用于声明局部变量/全局变量,如果被声明为顶层元素则是全局的,如果在模板内部声明则为局部的。一旦设置了变量的值,就无法改变或修改该值,但可以通过其内容或select属性向变量添加值。注意:如果设置了select属性则variable不能包含任何内容了。
    如:仍对上面的books.xml进行取每一层的最后一个chapter操作:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
    	<xsl:variable name="totalChapters">
    		<xsl:value-of select="//chapter[last()]"/>
    	</xsl:variable>
    	<xsl:template match="/">
    		<xsl:value-of select="$totalChapters"/>
    	</xsl:template>
    </xsl:stylesheet>


    操作结果:注意Third Chapter被应用了此模板,因此递归调用。
    Subchapter 2 
    Third Chapter 
    Subchapter A
    Subchapter B 
    subsub a 
    subsub b 
    Subchapter B 
    subsub a 
    subsub b 
    subsub b


    八、 XSL中的key元素<xsl:key name="name" match="pattern" use="expression">
    该元素是顶层元素,可以为指定的元素分配名称和值对,通过key()函数在样式表中使用。但此处的key不必是唯一的。
    三个属性均为必需的,name规定键的名称,match规定键被应用到哪个节点,use指定要作为该键的值使用的表达式。
    如定义一个键来寻找作者含有Jim Blue的书的所有作者:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
    	<xsl:key name="findAuthor" match="list/book" use="author"/>
    	
    	<xsl:param name="author">Jim Blue</xsl:param>
    	<xsl:template match="/">
    		<xsl:copy-of select="key('findAuthor', $author)"/>
    	</xsl:template>
    </xsl:stylesheet>


    源keyTest.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <list>
    	<book ID="234">
    		<author>Jim Blue</author>
    		<author>Dan Farm</author>
    		<author>Blue Flowers</author>
    	</book>
    	<book ID="666">
    		<author>Mark Simp</author>
    		<author>Jim Blue</author>
    		<author>Green Trees</author>
    	</book>
    	<book ID="898">
    		<author>Jay Bart</author>
    		<author>Red Tulips</author>
    	</book>
    </list>


    输出结果:
    Jim Blue
    Dan Farm
    Blue Flowers
    Mark Simp
    Jim Blue
    Green Trees


    九、通过XSLT与XQuery生成HTML

    给定students.xml文件,按照出生年月日排序,学号为Z00123101的学生信息用绿色显示,学号为Z00123102的学生信息用蓝色显示,其余用红色显示。


    源students.xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <students>
     
         <student id="Z00123101">
                  <name>The No.1 student</name>
                  <birthday>1987.2</birthday>
                  <phone>62220001</phone>
         </student>
     
         <student id="Z00123102">
                  <name>the No.2 student</name>
                  <birthday>1975.6</birthday>
                  <phone>62220002</phone>
         </student>
     
         <student id="Z00123103">
                  <name>the No.3 student</name>
                  <birthday>1978.8</birthday>
                  <phone>62220003</phone>
         </student>
     
         <student id="Z00123104">
                  <name>the No.4 student</name>
                  <birthday>1976.2</birthday>
                  <phone>62220004</phone>
         </student>
     
    </students>


    通过XSLT生成:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
         <xsl:template match="/">
                  <html>
                           <head>
                                   <table border="1" cols="4" width="100%">
                                   <tr>
                                            <th>No</th>
                                            <th>Name</th>
                                            <th>Phone</th>
                                            <th>Birthday</th>
                                   </tr>
                                   <xsl:for-each select="students/student">
                                   <xsl:sort select="birthday"/>
                                   <xsl:choose>
                                            <xsl:when test="@id='Z00123101'">
                                                     <tr style="color:green">
                                                              <td><xsl:value-of select="@id"/></td>
                                                              <xsl:apply-templates select="name|phone"/>
                                                              <xsl:apply-templates select="birthday"/>
                                                     </tr>
                                            </xsl:when>
                                            <xsl:when test="@id='Z00123102'">
                                                     <tr style="color:blue">
                                                              <td><xsl:value-of select="@id"/></td>
                                                              <xsl:apply-templates select="name|phone"/>
                                                              <xsl:apply-templates select="birthday"/>
                                                     </tr>
                                            </xsl:when>
                                            <xsl:otherwise>
                                            <tr style="color:red">
                                                     <td><xsl:value-of select="@id"/></td>
                                                     <xsl:apply-templates select="name|phone"/>
                                                     <xsl:apply-templates select="birthday"/>
                                            </tr>
                                            </xsl:otherwise>
                                   </xsl:choose>
                                   </xsl:for-each>
                                   </table>
                           </head>
                           <body></body>
                  </html>
         </xsl:template>
         <xsl:template match="name|phone|birthday">
                  <td><xsl:value-of select="."></xsl:value-of></td>
         </xsl:template>
        
    </xsl:stylesheet>


    通过XQuery生成:

    xquery version "1.0";
    <html>  
        <head> 
            <table border="1" cols="4" width="100%">
                           <tr>
                                   <th>No</th>
                                   <th>Name</th>
                                   <th>Phone</th>
                                   <th>Birthday</th>
                           </tr>  
                {  
                for $x in doc("students.xml")/students/student  
                                   order by $x/birthday
                    return if(data($x/@id)="Z00123102")
                    then <tr style="color:blue">  
                        <td>{data($x/@id)}</td>  
                        <td>{data($x/name)}</td>  
                        <td>{data($x/phone)}</td>  
                        <td>{data($x/birthday)}</td>
                    </tr>  
                    else if(data($x/@id)="Z00123101")
                    then <tr style="color:green">  
                        <td>{data($x/@id)}</td>  
                        <td>{data($x/name)}</td>  
                        <td>{data($x/phone)}</td>  
                        <td>{data($x/birthday)}</td>
                    </tr>
                    else <tr style="color:red">  
                        <td>{data($x/@id)}</td>  
                        <td>{data($x/name)}</td>  
                        <td>{data($x/phone)}</td>  
                        <td>{data($x/birthday)}</td>
                    </tr>  
                }          
            </table>
        </head>  
        <body/>  
    </html>  
     



    展开全文
  • xml加xslt转化成html

    2009-05-20 13:50:01
    xml加xslt转化成html的源代码!超有用的
  • XSLT教程 [转]

    2007-08-31 14:39:00
    XSLT教程 XSL代表可扩充样式表语言为了适应基于XML的样式表语言的需要,万维网联盟(W3C)开始发展XSL。XSLT代表XSL的变革。在这个教程里,你会学到如何通过XSLT把XML文档转换成别的版式——例如XHTML。 XSLT ...

    XSLT教程

    XSL代表可扩充样式表语言
    为了适应基于XML的样式表语言的需要,万维网联盟(W3C)开始发展XSL。
    XSLT代表XSL的变革。在这个教程里,你会学到如何通过XSLT把XML文档转换成别的版式——例如XHTML。

    XSLT 参考

    XSLT 元素
    来自W3C参考标准所定义(XSLT版本1.0)的XSLT元素。

    XSLT 函数
    XSLT包含了超过100个内置函数。有些是为了字符串值,数字值,数据和时间比较关系,节点和OName操作,序列操作,布尔(逻辑)值,以及更多。

    内容目录

    XSL 语言
    Defines the sub-languages of XSL: XSLT, XPath and XSL-FO.
    XSL的子语言:XSLT,XPath和XSL-FO。

    XSLT 介绍
    An introduction to XSLT. What it is, and what it can do.
    有关XSLT的介绍,它的概念,以及它的用途

    XSLT 浏览起器
    Overview of browser support for XSLT.
    了解下哪些浏览器支持XSLT

    XSLT Transformation
    How XSLT can be used to transform XML documents into XHTML documents.
    怎样才能让XSLT将XML文档转换成为XHTML文档

    XSLT Templates
    The <xsl:template> element contains rules to apply when a specified node is matched.
    当一个指定的点吻合的时候<xsl:template>元素所含规则就可以生效

    XSLT <xsl:value-of> 元素
    The <xsl:value-of> element extracts the value of a selected node.
    <xsl:value-of>元素用于选取选择节点值。

    XSLT <xsl:for-each> 元素
    The <xsl:for-each> element allows you to do looping in XSL.
    <xsl:for-each>元素允许在XSLT里使用循环语句。

    XSLT <xsl:sort> 元素
    The <xsl:sort> element is used to sort the output.
    <xsl:sort>元素用于对结果进行分类。

    XSLT <xsl:if> 元素
    The <xsl:if> element is used to put a conditional test against the content of the XML file.
    <xsl:if>元素的作用是:对XML文件的内容设置一个条件语句。

    XSLT <xsl:choose> 元素
    The <xsl:choose> element is used in conjunction with <xsl:when> and <xsl:otherwise> to express multiple conditional tests.
    <xsl:choose>元素通过<xsl:when>和<xsl:otherwise>一起配合是用来表达多种条件语句。

    XSLT <xsl:apply-templates> 元素
    The <xsl:apply-templates> element applies a template rule to the current element or to the current element's child nodes.
    <xsl:apply-templates>元素是把模板应用到当前元素或当前元素的子节点上。

    位于客户端的XSL
    How to transform an XML document to an XHTML document on the client.
    如果你的浏览器支持XSLT,它可以在你的浏览器中把文件转换成XHTML。

    位于服务器端的XSL
    How to transform an XML document to an XHTML document on the server.
    因为不是所有的浏览器都支持XSLT,所以人们提出了一个在服务器端把XML转换成XHTML的解决方案。


    XSL 语言
    w3pop.com / 2006-09-19

    It started with XSL and ended up with XSLT, XPath, and XSL-FO.
    XSL含有三个子语言:XSLT,XPath和XSL-FO。

    It Started with XSL
    以XSL为开始

    XSL stands for EXtensible Stylesheet Language.
    XSL代表着可扩充样式表语言(EXtensible Stylesheet Language)。

    The World Wide Web Consortium (W3C) started to develop XSL because there was a need for an XML-based Stylesheet Language.
    因为基于XML样式表语言的需要,万维网联盟(W3C)开始发展XSL。


    CSS = HTML Style Sheets
    层叠式样式表(CSS)= HTML样式表

    HTML uses predefined tags and the meaning of the tags are well understood.
    HTML使用预定的标签,标签的含义比较容易理解。

    The <table> element in HTML defines a table - and a browser knows how to display it.
    在HTML中,<table>元素定义了一个表格,浏览器知道如何去显示它。

    Adding styles to HTML elements is simple. Telling a browser to display an element in a special font or color, is easy with CSS.
    给HTML元素定义样式是比较容易的。通过使用CSS,告诉浏览器对特殊字体和颜色的元素进行显示,是非常容易的。


    XSL = XML Style Sheets
    XSL=XML样式表

    XML does not use predefined tags (we can use any tag-names we like), and the meaning of these tags are not well understood.
    XML不使用预定的标签(我们可以使用任何我们自己喜欢的标签名字),这些标签的含义比较难以理解。

    The <table> element in HTML defines a table - and a browser knows how to display it.
    <table>元素可以表示HTML表格,一种设备,或者别的一些东西,因此浏览器不知道如何去显示它们。

    Adding styles to HTML elements is simple. Telling a browser to display an element in a special font or color, is easy with CSS.
    XSL描述的是如何显示XML文档。


    XSL - More Than a Style Sheet Language
    XSL-超越样式表语言(More Than a Style Sheet Language)

    XSL consists of three parts:
    XSL由3部分组成:

    • XSLT - a language for transforming XML documents
      XSLT-转变XML文档的语言。
    • XPath - a language for navigating in XML documents
      XPath-对XML文档进行操作的语言。
    • XSL-FO - a language for formatting XML documents
      XSL-FO - 格式化XML文档的语言。

    This Tutorial is About XSLT

    针对XSLT的教程

    The rest of this tutorial is about XSLT - the language for transforming XML documents.
    剩下这部分的教程是关于XSLT的——转换XML文件的语言。

    But you can also study our XPath Tutorial and our XSL-FO Tutorial.
    同样你还可以学习 XPath 教程 和我们的 XSL-FO 教程.

    XSLT 介绍
    w3pop.com / 2006-09-20

    XSLT is a language for transforming XML documents into XHTML documents or to other XML documents.
    XSLT是一种把XML文件转换成XHTML文档或者其他的XML文档的语言。

    XPath is a language for navigating in XML documents.
    XPath是一种由于操作XML文档的语言。


    What You Should Already Know
    学前基础

    Before you continue you should have a basic understanding of the following:
    如果你想继续下面的学习,你必须得掌握下面的一些基本常识。

    • HTML / XHTML
    • XML / XML 命名空间
    • XPath

    If you want to study these subjects first, find the tutorials on our Home page.
    如果你想要先学习这些课题,那请在知识库找到这些教程.


    What is XSLT?
    什么是XSLT?

    • XSLT stands for XSL Transformations
      XSLT代表XSL转换(XSL Transformations)
    • XSLT is the most important part of XSL
      XSLT是XSL最重要的部分
    • XSLT transforms an XML document into another XML document
      XSLT可以把XML文档转换成另一个XML文档
    • XSLT uses XPath to navigate in XML documents
      XSLT通过XPath操作XML文档
    • XSLT is a W3C Recommendation
      XSLT是一种W3C参考标准

    XSLT = XSL Transformations
    XSLT=XSL转换(XSL Transformations)

    XSLT is the most important part of XSL.
    XSLT是XSL的最重要的一部分。

    XSLT is used to transform an XML document into another XML document, or another type of document that is recognized by a browser, like HTML and XHTML. Normally XSLT does this by transforming each XML element into an (X)HTML element.
    XSLT用于把XML文件转换成另一份XML文件,或者转换成另一种被浏览器所识别的诸如HTML和XHTML类型的文件。通常情况下,XSLT是通过把每个XML元素转换成(X)HTML文件来完成的。

    With XSLT you can add/remove elements and attributes to or from the output file. You can also rearrange and sort elements, perform tests and make decisions about which elements to hide and display, and a lot more.
    通过XSML,你可以从已输出的文件里添加/移除元素和属性。你也可以把元素重新排列和分类,执行测试语句,决定是隐藏还是显示元素,或者实现其它更多的功能。

    A common way to describe the transformation process is to say that XSLT transforms an XML source-tree into an XML result-tree.
    对于描述转换过程,可以形象的描述为:XSLT把XML源树转(XML source-tree)换成XML结果树(XML result-tree)。


    XSLT Uses XPath
    XSLT对于XPath的使用

    XSLT uses XPath to find information in an XML document. XPath is used to navigate through elements and attributes in XML documents.
    XSLT通过对XPath的使用来找寻XML文档中的信息。XPath用于操作XML文件中的元素和属性。

    If you want to study XPath first, please read our XPath Tutorial.
    如果你想先学习XPath,请先阅读我们的XPath教程.


    How Does it Work?
    如何使它运行?

    In the transformation process, XSLT uses XPath to define parts of the source document that should match one or more predefined templates. When a match is found, XSLT will transform the matching part of the source document into the result document.
    在转换过程中,XSLT通过XPath来定义部分应该和一个或更多预定的模板相匹配的源文件。当一个匹配找到后,XSLT将会把相匹配的部分源文件转换成结果文档。


    XSLT is a Web Standard
    XSLT是一个网络标准

    XSLT became a W3C Recommendation 16. November 1999.
    XSLT在1999年11月16日成为W3C参考标准。

    To read more about the XSLT activities at W3C, please read our W3C Tutorial.
    如果想了解更多关于W3C上的XSLT活动,请阅读我们的 W3C教程。

    XSLT 浏览器
    w3pop.com / 2006-09-20

    Nearly all major browsers have support for XML and XSLT.
    几乎所有专业浏览器都支持XML和XSLT。


    Mozilla Firefox
    Mozilla火狐

    As of version 1.0.2, Firefox has support for XML and XSLT (and CSS).
    就如1,0,2版本的火狐是支持XML和XSLTi(以及CSS)。


    Mozilla

    Mozilla includes Expat for XML parsing and has support to display XML + CSS. Mozilla also has some support for Namespaces.
    Mozilla含有XML外部解析器并且支持XML+CSS的显示,Mozilla同时也支持一些命名空间(namespace)。

    Mozilla is available with an XSLT implementation.
    Mozilla可执行XSLT。


    Netscape

    As of version 8, Netscape uses the Mozilla engine, and therefore it has the same XML / XSLT support as Mozilla.
    Netscape版本8使用Mozilla引擎,因此它和Mozilla一样支持XML/XSLT。


    Opera

    As of version 9, Opera has support for XML and XSLT (and CSS). Version 8 supports only XML + CSS.
    Opera版本9 ,支持XML和XSLT(以及CSS);Opera版本8只支持XML+CSS。


    Internet Explorer

    As of version 6, Internet Explorer supports XML, Namespaces, CSS, XSLT, and XPath.
    IE6浏览器支持XML,Namespaces,CSS,XSLT和XPath。

    Version 5 is NOT compatible with the official W3C XSL Recommendation.
    IE5.0和The official W3C XSL参考标准并不是一样的。

    XSLT 转换
    w3pop.com / 2006-09-20

    Example study: How to transform XML into XHTML using XSLT.
    实例学习:如何通过XSLT把XML转换成XHTML。

    The details of this example will be explained in the next chapter.
    此实例的详细情况将在下一章中作详细说明。


    Correct Style Sheet Declaration
    正确的样式表声明

    The root element that declares the document to be an XSL style sheet is <xsl:stylesheet> or <xsl:transform>.
    将文件以XSL样式表进行声明的根元素(root element)是<xsl:stylesheet> 或<xsl:transform>。

    Note: <xsl:stylesheet> and <xsl:transform> are completely synonymous and either can be used!
    注意: <xsl:stylesheet> 和<xsl:transform>是完全同义的,任何一个都能被使用。

    The correct way to declare an XSL style sheet according to the W3C XSLT Recommendation is:
    声明根据W3C XSLT参考标准的XSL样式表的正确的途径是:

    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    or:
    或:

    <xsl:transform version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    To get access to the XSLT elements, attributes and features we must declare the XSLT namespace at the top of the document.
    想要有权使用XSLT元素,我们必须在文件的顶端事先声明XSLT命名空间的属性和特征。

    The xmlns:xsl="http://www.w3.org/1999/XSL/Transform" points to the official W3C XSLT namespace. If you use this namespace, you must also include the attribute version="1.0".
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform指出了官方W3C XSLT的命名空间(namespace)。如果你使用了这个命名空间,你也必须注明属性版本(version)=1.0。


     

    Start with a Raw XML Document
    以XML源文件开始

    We want to transform the following XML document ("cdcatalog.xml") into XHTML:
    让我们把下面的XML文件("cdcatalog.xml")转换成XHTML吧。

    <?xml version="1.0" encoding="ISO-8859-1"?>

    <catalog>
    <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>

    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
    </cd>

    .
    .
    .
    </catalog>

    Viewing XML Files in Firefox and Internet Explorer: Open the XML file (typically by clicking on a link) - The XML document will be displayed with color-coded root and child elements. A plus (+) or minus sign (-) to the left of the elements can be clicked to expand or collapse the element structure. To view the raw XML source (without the + and - signs), select "View Page Source" or "View Source" from the browser menu.
    在火狐和IE浏览器中查看XML文件的方法: 打开XML文件(通过链接)-XML文件将会显示含有颜色代码的根元素和子元素。单击左边元素的“+”和“-”,展开或者缩回元素列表。查看XML源文件的源代码(没有加号和减号),在浏览器菜单里选择“查看页面源代码(View Page Source)”或者“查看源代码(View Source)”。

    Viewing XML Files in Netscape 6: Open the XML file, then right-click in XML file and select "View Page Source". The XML document will then be displayed with color-coded root and child elements.
    在Netscape 6中查看XML文件的方法:打开XML文件,在XML文件里右键单击选择“查看页面源代码(View Page Source)”。XML文件将会通过标有颜色代码的根元素和子元素来显示。

    Viewing XML Files in Opera 7: Open the XML file, then right-click in XML file and select "Frame" / "View Source". The XML document will be displayed as plain text.
    在Opera 7中查看XML文件的方法: 打开XML文件,在XML文件里右键单击选择“框架/查看源代码("Frame" / "View Source")”。XML文件将会通过纯文本显示。

    View "cdcatalog.xml"
    查看 "cdcatalog.xml"

    Create an XSL Style Sheet
    创建一个XSL样式表

    Then you create an XSL Style Sheet ("cdcatalog.xsl") with a transformation template:
    你通过一个转换模板创建了一个XSL样式表("cdcatalog.xsl")。

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <html>
    <body>

    <h2>My CD Collection</h2>
    <table border="1">
    <tr bgcolor="#9acd32">
    <th align="left">Title</th>

    <th align="left">Artist</th>
    </tr>
    <xsl:for-each select="catalog/cd">
    <tr>
    <td><xsl:value-of select="title"/></td>

    <td><xsl:value-of select="artist"/></td>
    </tr>
    </xsl:for-each>
    </table>
    </body>

    </html>
    </xsl:template>
    </xsl:stylesheet>

     

    View "cdcatalog.xsl"
    查看"cdcatalog.xsl"

    Link the XSL Style Sheet to the XML Document
    将XSL样式表连接到XML文档中

    Add the XSL style sheet reference to your XML document ("cdcatalog.xml"):
    把XSL样式表参数添加到XML文件"cdcatalog.xml"):

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
    <catalog>
    <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
    </cd> . . .
    </catalog>

    If you have an XSLT compliant browser it will nicely transform your XML into XHTML.
    如果你有了一个合适的浏览器,它将会准确地帮你把XML文件转换成XHTML。

    View the result
    查看结果

    The details of the example above will be explained in the next chapters.
    以上实例的细节部分将会在下一章中作详细说明。

    <xsl:template>
    w3pop.com / 2006-09-20

    An XSL style sheet consists of one or more set of rules that are called templates.
    XSL样式表是由一个或者更多的被称为“模板(templates)”的规则设置(set of rules)组成的。

    Each template contains rules to apply when a specified node is matched.
    当与指定的节点匹配时,每个模板都包含了应用规则。


    The <xsl:template> Element
    XSLT<xsl:template>元素

    The <xsl:template> element is used to build templates.
    XSLT<xsl:template>元素是用于创建模板的。

    The match attribute is used to associate a template with an XML element. The match attribute can also be used to define a template for the entire XML document. The value of the match attribute is an XPath expression (i.e. match="/" defines the whole document).
    Match的属性的作用是使模板和XML与元素相结合。Match属性也可以为整个XML定义模版。Match属性值是一个XPath表达式。(也就是match="/" defines the whole document)

    Ok, let's look at a simplified version of the XSL file from the previous chapter:
    好了,现在让我们来看一下摘自前面章节的XSL文件的简易版本。

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"

    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <html>
    <body>
    <h2>My CD Collection</h2>

    <table border="1">
    <tr bgcolor="#9acd32">
    <th>Title</th>
    <th>Artist</th>

    </tr>
    <tr>
    <td>.</td>
    <td>.</td>
    </tr>

    </table>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>

    Since an XSL style sheet is an XML document itself, it always begins with the XML declaration: <?xml version="1.0" encoding="ISO-8859-1"?>.
    因为XSL样式表是XML文档本身,所以它一般都从XML开始声明:<?xml version="1.0" encoding="ISO-8 59-1"?>

    The next element, <xsl:stylesheet>, defines that this document is an XSLT style sheet document (along with the version number and XSLT namespace attributes).
    下一个元素<xsl:stylesheet>,把这份文档定义为XSLT样式表文档(跟版本号和XSLT命名空间属性一样)。

    The <xsl:template> element defines a template. The match="/" attribute associates the template with the root of the XML source document.
    <xsl:template>元素定义了一份模板。Match=”/”属性使模板和XML源文件的根目录联系起来。

    The content inside the <xsl:template> element defines some HTML to write to the output.
    <xsl:template>元素里面的内容定义一些HTML来对结果进行书写。

    The last two lines define the end of the template and the end of the style sheet.
    最后两行定义了模版的结束符和样式表的结束符。

    The result of the transformation above will look like this:
    通过上面的代码,转换的结果如下:

    My CD Collection
    我的CD集

    Title Artist
    . .

     

    View the XML fileView the XSL file, and View the result
    查看XML文件, 查看 XSL文件, 还有 看下最后的结果

    The result from this example was a little disappointing, because no data was copied from the XML document to the output.
    通过这个例子所产生的结果有点令人失望,因为没有将任何数据从XML文档中复制到结果当中。

    In the next chapter you will learn how to use the <xsl:value-of> element to select values from the XML elements.
    下一章当中,你将会学习如何通过<xsl:value-of>元素从XML元素中选择值。

    <xsl:value-of>
    w3pop.com / 2006-09-20

    p.gif<xsl:template> <xsl:for-each> n.gif

    The <xsl:value-of> element is used to extract the value of a selected node.
    <xsl:value-of>元素用于选取选择节点值。


    The <xsl:value-of> Element
    <xsl:value-of>元素

    The <xsl:value-of> element can be used to extract the value of an XML element and add it to the output stream of the transformation:
    <xsl:value-of>元素可以用来选取XML元素以及把它添加到已被转换的输出流里中去。

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">

    <html>
    <body>
    <h2>My CD Collection</h2>
    <table border="1">
    <tr bgcolor="#9acd32">

    <th>Title</th>
    <th>Artist</th>
    </tr>
    <tr>
    <td><xsl:value-of select="catalog/cd/title"/></td>

    <td><xsl:value-of select="catalog/cd/artist"/></td>
    </tr>
    </table>
    </body>
    </html>

    </xsl:template>
    </xsl:stylesheet>

    Note: The value of the select attribute is an XPath expression. An XPath expression works like navigating a file system; where a forward slash (/) selects subdirectories.
    注意: 选择(select)属性值是一个XPath表达式。XPath表达式的作用类似于对文件系统进行操作,通过在其前段添加“/”来选择子目录。

    The result of the transformation above will look like this:
    通过上面运行的代码,转换结果如下:

    My CD Collection
    我的CD集

    Title Artist
    Empire Burlesque Bob Dylan

    View the XML file, View the XSL file, and View the result
    XML 文件, XSL 文件, 以及 结果页面

    The result from this example was also a little disappointing, because only one line of data was copied from the XML document to the output.
    通过这个例子得到的结果同样让人有点失望,因为只有一行数据从XML文件中复制到结果。

    In the next chapter you will learn how to use the <xsl:for-each> element to loop through the XML elements, and display all of the records.
    在下一章中,你将会学到通过XML元素如何使用<xsl:for-each>元素来做循环以及显示所有的记录。

    <xsl:for-each>
    w3pop.com / 2006-09-20

    The <xsl:for-each> element allows you to do looping in XSLT.
    <xsl:for-each>元素允许在XSLT里使用循环语句。


    The <xsl:for-each> Element
    <sxl:-each>元素

    The XSL <xsl:for-each> element can be used to select every XML element of a specified node-set:
    XSL<xsl:for-each>元素的作用是:选择任何一个具有指定的节点设置(node-set)的XML元素。

    <?xml version="1.0" encoding="ISO-8859-1"?>

    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <html>
    <body>
    <h2>My CD Collection</h2>

    <table border="1">
    <tr bgcolor="#9acd32">
    <th>Title</th>
    <th>Artist</th>

    </tr>
    <xsl:for-each select="catalog/cd">
    <tr>
    <td><xsl:value-of select="title"/></td>
    <td><xsl:value-of select="artist"/></td>
    </tr>
    </xsl:for-each>
    </table>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>

    Note: The value of the select attribute is an XPath expression. An XPath expression works like navigating a file system; where a forward slash (/) selects subdirectories.
    注意: 选择(select)属性值是一个XPath的表达式值。XPath表达式主要用于类似文件系统的操作,而这个文件系统里是通过在前端添加“/”选择子目录。

    The result of the transformation above will look like this:
    上面转换结果如下:

    My CD Collection
    我的CD集

    Title Artist
    Empire Burlesque Bob Dylan
    Hide your heart Bonnie Tyler
    Greatest Hits Dolly Parton
    Still got the blues Gary More
    Eros Eros Ramazzotti
    One night only Bee Gees
    Sylvias Mother Dr.Hook
    Maggie May Rod Stewart
    Romanza Andrea Bocelli
    When a man loves a woman Percy Sledge
    Black angel Savage Rose
    1999 Grammy Nominees Many
    For the good times Kenny Rogers
    Big Willie style Will Smith
    Tupelo Honey Van Morrison
    Soulsville Jorn Hoel
    The very best of Cat Stevens
    Stop Sam Brown
    Bridge of Spies T`Pau
    Private Dancer Tina Turner
    Midt om natten Kim Larsen
    Pavarotti Gala Concert Luciano Pavarotti
    The dock of the bay Otis Redding
    Picture book Simply Red
    Red The Communards
    Unchain my heart Joe Cocker

    View the XML file, View the XSL file, and View the result
    XML 文件, XSL 文件, 以及 结果

    Filtering the Output
    过滤结果(Filtering the Output)

    We can also filter the output from the XML file by adding a criterion to the select attribute in the <xsl:for-each> element.
    我们也可以从XML文件通过将一个规则添加到<xsl:for-each>元素中的选择属性来过滤结果。

    <xsl:for-each select="catalog/cd[artist='Bob Dylan']">

    Legal filter operators are:
    正规的过滤操作是:

    • =  (equal)
      =  (等于)
    • != (not equal)
      != (不等于)
    • &lt; less than
      < 小于
    • &gt; greater than
      > 大于

    Take a look at the adjusted XSL style sheet:
    让我们来看一下调整过的XSL样式表:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"

    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <html>
    <body>
    <h2>My CD Collection</h2>

    <table border="1">
    <tr bgcolor="#9acd32">
    <th>Title</th>
    <th>Artist</th>

    </tr>
    <xsl:for-each select="catalog/cd[artist='Bob Dylan']">
    <tr>
    <td><xsl:value-of select="title"/></td>
    <td><xsl:value-of select="artist"/></td>
    </tr>
    </xsl:for-each>
    </table>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>

    The result of the transformation above will look like this:
    上面的转换结果如下:

    My CD Collection
    我的CD集

    Title Artist
    Empire Burlesque Bob Dylan

    View the XML file, View the XSL file, View the result
    XML文件, XSL文件, 结果

    <xsl:sort>
    w3pop.com / 2006-09-20

    The <xsl:sort> element is used to sort the output.
    <xsl:sort>元素用于对结果进行分类。


    Where to put the Sort Information
    在哪儿放置分类信息

    To sort the output, simply add an <xsl:sort> element inside the <xsl:for-each> element in the XSL file:
    如果要对结果进行分类,可以在XSL文件里的<xsl:for-each>元素中添加一个<xsl:sort>元素。

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <html>
    <body>
    <h2>My CD Collection</h2>
    <table border="1">

    <tr bgcolor="#9acd32">
    <th>Title</th>
    <th>Artist</th>
    </tr>

    <xsl:for-each select="catalog/cd">
    <xsl:sort select="artist"/>
    <tr>
    <td><xsl:value-of select="title"/></td>
    <td><xsl:value-of select="artist"/></td>
    </tr>
    </xsl:for-each>
    </table>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>

    Note: The select attribute indicates what XML element to sort on.
    注意: 选择(select)属性需要会告诉你哪些XML元素需要进行分类。

    The result of the transformation above will look like this:
    通过运行上面这段代码,我们可以看到的转换结果如下:

    My CD Collection
    我的CD集

    Title Artist
    Romanza Andrea Bocelli
    One night only Bee Gees
    Empire Burlesque Bob Dylan
    Hide your heart Bonnie Tyler
    The very best of Cat Stevens
    Greatest Hits Dolly Parton
    Sylvias Mother Dr.Hook
    Eros Eros Ramazzotti
    Still got the blues Gary Moore
    Unchain my heart Joe Cocker
    Soulsville Jorn Hoel
    For the good times Kenny Rogers
    Midt om natten Kim Larsen
    Pavarotti Gala Concert Luciano Pavarotti
    1999 Grammy Nominees Many
    The dock of the bay Otis Redding
    When a man loves a woman Percy Sledge
    Maggie May Rod Stewart
    Stop Sam Brown
    Black angel Savage Rose
    Picture book Simply Red
    Bridge of Spies T`Pau
    Red The Communards
    Private Dancer Tina Turner
    Tupelo Honey Van Morrison
    Big Willie style Will Smith

     

    View the XML file, View the XSL file, and View the result
    XML文件, XSL文件, 以及 结果

    <xsl:if>
    w3pop.com / 2006-09-20

    The <xsl:if> element is used to put a conditional test against the content of the XML file.
    <xsl:if>元素的作用是:对XML文件的内容设置一个条件语句。


    The <xsl:if> Element
    <xsl:if>元素

    To put a conditional if test against the content of the XML file, add an <xsl:if> element to the XSL document.
    如果你要对XML文件的内容设置一个条件语句,那需要向XSL文件中添加一个<xsl:if>元素。

    Syntax
    语法

    <xsl:if test="expression">

    ...
    ...some output if the expression is true...
    ...
    </xsl:if>


    Where to Put the <xsl:if> Element
    <xsl:if>元素应该放在哪

    To add a conditional test, add the <xsl:if> element inside the <xsl:for-each> element in the XSL file:
    要添加一个条件语句,那必须先在XSL文件里的<xsl:for-each>里添加一个<xsl:if>元素。

    <?xml version="1.0" encoding="ISO-8859-1"?>

    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <html>
    <body>
    <h2>My CD Collection</h2>

    <table border="1">
    <tr bgcolor="#9acd32">
    <th>Title</th>
    <th>Artist</th>

    </tr>
    <xsl:for-each select="catalog/cd">
    <xsl:if test="price > 10">
    <tr>
    <td><xsl:value-of select="title"/></td>
    <td><xsl:value-of select="artist"/></td>
    </tr>
    </xsl:if>
    </xsl:for-each>
    </table>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>

    Note: The value of the required test attribute contains the expression to be evaluated.
    注意: 所要求的语句(test)属性值包括了要条件表达式。

    The code above will only output the title and artist elements of the CDs that has a price that is higher than 10.
    上面的代码仅仅会输出那些价格高于10的CD的标题和艺术家。

    The result of the transformation above will look like this:
    上面的转换结果如下:

    My CD Collection
    我的CD集

    Title Artist
    Empire Burlesque Bob Dylan
    Still got the blues Gary Moore
    One night only Bee Gees
    Romanza Andrea Bocelli
    Black Angel Savage Rose
    1999 Grammy Nominees Many

    View the XML file, View the XSL file, and View the result
    XML文件, XSL文件, 以及 结果

    <xsl:choose>
    w3pop.com / 2006-09-20

    The <xsl:choose> element is used in conjunction with <xsl:when> and <xsl:otherwise> to express multiple conditional tests.
    <xsl:choose>元素通过<xsl:when>和<xsl:otherwise>一起配合是用来表达多种条件语句。


    The <xsl:choose> Element
    <xsl:choose>元素

    Syntax
    语法

    <xsl:choose>

    <xsl:when test="expression">
    ... some output ...
    </xsl:when>
    <xsl:otherwise>
    ... some output ....
    </xsl:otherwise>
    </xsl:choose>


    Where to put the Choose Condition
    如何提出选择条件

    To insert a multiple conditional test against the XML file, add the <xsl:choose>, <xsl:when>, and <xsl:otherwise> elements to the XSL file:
    对XML文件插入一个多重条件语句,将<xsl:choose>,<xsl:when>和<xsl:otherwise>元素添加到XSL文件中:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <html>
    <body>
    <h2>My CD Collection</h2>
    <table border="1">

    <tr bgcolor="#9acd32">
    <th>Title</th>
    <th>Artist</th>
    </tr>

    <xsl:for-each select="catalog/cd">
    <tr>
    <td><xsl:value-of select="title"/></td>
    <xsl:choose>
    <xsl:when test="price > 10">

    <td bgcolor="#ff00ff">
    <xsl:value-of select="artist"/></td>
    </xsl:when>
    <xsl:otherwise>
    <td><xsl:value-of select="artist"/></td>
    </xsl:otherwise>
    </xsl:choose>

    </tr>
    </xsl:for-each>
    </table>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>

    The code above will add a pink background-color to the "Artist" column WHEN the price of the CD is higher than 10.
    当CD的价格高于10 时,上面的这些代码会将红色背景颜色添加到”Artist”专栏。

    The result of the transformation will look like this:
    转换结果如下:

    My CD Collection
    我的CD集

    Title Artist
    Empire Burlesque Bob Dylan
    Hide your heart Bonnie Tyler
    Greatest Hits Dolly Parton
    Still got the blues Gary Moore
    Eros Eros Ramazzotti
    One night only Bee Gees
    Sylvias Mother Dr.Hook
    Maggie May Rod Stewart
    Romanza Andrea Bocelli
    When a man loves a woman Percy Sledge
    Black angel Savage Rose
    1999 Grammy Nominees Many
    For the good times Kenny Rogers
    Big Willie style Will Smith
    Tupelo Honey Van Morrison
    Soulsville Jorn Hoel
    The very best of Cat Stevens
    Stop Sam Brown
    Bridge of Spies T`Pau
    Private Dancer Tina Turner
    Midt om natten Kim Larsen
    Pavarotti Gala Concert Luciano Pavarotti
    The dock of the bay Otis Redding
    Picture book Simply Red
    Red The Communards
    Unchain my heart Joe Cocker

    View the XML file, View the XSL file, and View the result
    XML文件, XSL文件, 以及 结果

    Another Example
    另外一个举例

    Here is another example that contains two <xsl:when> elements:
    这里是另外一个包含2个<xsl:when>元素的例子。

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <html>
    <body>
    <h2>My CD Collection</h2>
    <table border="1">

    <tr bgcolor="#9acd32">
    <th>Title</th>
    <th>Artist</th>
    </tr>

    <xsl:for-each select="catalog/cd">
    <tr>
    <td><xsl:value-of select="title"/></td>
    <xsl:choose>
    <xsl:when test="price > 10">

    <td bgcolor="#ff00ff">
    <xsl:value-of select="artist"/></td>
    </xsl:when>
    <xsl:when test="price < 9">

    <td bgcolor="#cccccc">
    <xsl:value-of select="artist"/></td>
    </xsl:when>
    <xsl:otherwise>
    <td><xsl:value-of select="artist"/></td>
    </xsl:otherwise>
    </xsl:choose>

    </tr>
    </xsl:for-each>
    </table>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>

    The code above will add a pink background color to the "Artist" column WHEN the price of the CD is higher than 10, and a grey background-color WHEN the price of the CD is higher than 9 and lower or equal to 10.
    当CD的价格高于10时,上面的这些代码会将红色背景颜色添加到“Artist”专栏;当CD的价格大于9小于等于10时,会将灰色背景颜色添加到“Artist”专栏。

    The result of the transformation will look like this:
    转换结果如下:

    My CD Collection
    我的CD集

    Title Artist
    Empire Burlesque Bob Dylan
    Hide your heart Bonnie Tyler
    Greatest Hits Dolly Parton
    Still got the blues Gary Moore
    Eros Eros Ramazzotti
    One night only Bee Gees
    Sylvias Mother Dr.Hook
    Maggie May Rod Stewart
    Romanza Andrea Bocelli
    When a man loves a woman Percy Sledge
    Black angel Savage Rose
    1999 Grammy Nominees Many
    For the good times Kenny Rogers
    Big Willie style Will Smith
    Tupelo Honey Van Morrison
    Soulsville Jorn Hoel
    The very best of Cat Stevens
    Stop Sam Brown
    Bridge of Spies T`Pau
    Private Dancer Tina Turner
    Midt om natten Kim Larsen
    Pavarotti Gala Concert Luciano Pavarotti
    The dock of the bay Otis Redding
    Picture book Simply Red
    Red The Communards
    Unchain my heart Joe Cocker

    View the XML file, View the XSL file, and View the result
    XML文件, XSL文件, 以及 结果

    <xsl:apply-templates>
    w3pop.com / 2006-09-20

    The <xsl:apply-templates> element applies a template to the current element or to the current element's child nodes.
    <xsl:apply-templates>元素是把模板应用到当前元素或当前元素的子节点上。


    The <xsl:apply-templates> Element
    <xsl:apply-templares>元素

    The <xsl:apply-templates> element applies a template to the current element or to the current element's child nodes.
    <xsl:apply-templates>元素是把模板应用到当前元素或当前元素的子节点上。

    If we add a select attribute to the <xsl:apply-templates> element it will process only the child element that matches the value of the attribute. We can use the select attribute to specify the order in which the child nodes are processed.
    如果我们向只处理与属性值相匹配的子元素的<xsl:apply-templates>中添加一个选择属性,我们可以使用选择属性来详细说明处理子节点的顺序。

    Look at the following XSL style sheet:
    我们来看一下下面的XSL样式表:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <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>

    The result of the transformation will look like this:
    转换的结果如下

    My CD Collection
    我的CD集

    Title: Empire Burlesque
    Artist: Bob Dylan

    Title: Hide your heart
    Artist: Bonnie Tyler

    Title: Greatest Hits
    Artist: Dolly Parton

    Title: Still got the blues
    Artist: Gary Moore

    Title: Eros
    Artist: Eros Ramazzotti

    Title: One night only
    Artist: Bee Gees

    Title: Sylvias Mother
    Artist: Dr.Hook

    Title: Maggie May
    Artist: Rod Stewart

    Title: Romanza
    Artist: Andrea Bocelli

    Title: When a man loves a woman
    Artist: Percy Sledge

    Title: Black angel
    Artist: Savage Rose

    Title: 1999 Grammy Nominees
    Artist: Many

    Title: For the good times
    Artist: Kenny Rogers

    Title: Big Willie style
    Artist: Will Smith

    Title: Tupelo Honey
    Artist: Van Morrison

    Title: Soulsville
    Artist: Jorn Hoel

    Title: The very best of
    Artist: Cat Stevens

    Title: Stop
    Artist: Sam Brown

    Title: Bridge of Spies
    Artist: T`Pau

    Title: Private Dancer
    Artist: Tina Turner

    Title: Midt om natten
    Artist: Kim Larsen

    Title: Pavarotti Gala Concert
    Artist: Luciano Pavarotti

    Title: The dock of the bay
    Artist: Otis Redding

    Title: Picture book
    Artist: Simply Red

    Title: Red
    Artist: The Communards

    Title: Unchain my heart
    Artist: Joe Cocker

    View the XML file, View the XSL file, and View the result.
    XML文件, XSL文件, 以及 结果.

    XSLT - 位于客户端
    w3pop.com / 2006-09-20

    If your browser supports it, XSLT can be used to transform the document to XHTML in your browser.
    如果你的浏览器支持XSLT,它可以在你的浏览器中把文件转换成XHTML。


    A JavaScript Solution
    JavaScript解决方案

    In the previous chapters we have explained how XSLT can be used to transform a document from XML to XHTML. We did this by adding an XSL style sheet to the XML file and let the browser do the transformation.
    在先前一章,我们已经解释了怎么用XSLT把一份文档从XML转换成XHTML。我们通过向XML文件中添加一个XSL样式表,并让浏览器对其进行转换。

    Even if this works fine, it is not always desirable to include a style sheet reference in an XML file (e.g. it will not work in a non XSLT aware browser.)
    即使这样做运行得不错,你也不可以绝对地将其视为一个XML文件的样式参考(比如,在不支持XSLT的浏览器中,它将不会运行)。

    A more versatile solution would be to use a JavaScript to do the transformation.
    更通用的解决方案是使用JavaScript来做转换。

    By using a JavaScript, we can:
    通过使用JavaScript,我们可以:

    • do browser-specific testing
      做浏览器的细节(browser-specific)测试
    • use different style sheets according to browser and user needs
      根据浏览器和使用者的需要使用不同的样式表。

    That is the beauty of XSLT! One of the design goals for XSLT was to make it possible to transform data from one format to another, supporting different browsers and different user needs.
    那是XSLT的魅力。其中一个XSLT的设计目标就是为了在支持不同浏览器和不同使用者需求的情况下,使它实现从一个格式到另一个格式的数据转换。

    XSLT transformation on the client side is bound to be a major part of the browsers work tasks in the future, as we will see a growth in the specialized browser market (Braille, aural browsers, Web printers, handheld devices, etc.)
    在客户端进行XSLT的转换一定是未来浏览器工作任务的主要部分,我们将会在专业的浏览器市场看到它的成长(与盲人对应的听觉浏览器, 网络打印机, 手动驱动等等)。


    The XML File and the XSL File
    XML文件和XSL文件

    Look at the XML document that you have seen in the previous chapters:
    来看一下已经在前一章看过的XML文件。

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <catalog>
    <cd>

    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>

    <price>10.90</price>
    <year>1985</year>
    </cd>
    .
    .
    .
    </catalog>

    View the XML file.
    XML文件.

    And the accompanying XSL style sheet:
    附随的XSL样式表:

    <?xml version="1.0" encoding="ISO-8859-1"?>

    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <html>
    <body>
    <h2>My CD Collection</h2>
    <table border="1">

    <tr bgcolor="#9acd32">
    <th align="left">Title</th>
    <th align="left">Artist</th>
    </tr>

    <xsl:for-each select="catalog/cd">
    <tr>
    <td><xsl:value-of select="title" /></td>
    <td><xsl:value-of select="artist" /></td>

    </tr>
    </xsl:for-each>
    </table>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>

    View the XSL file.
    查看XSL文件.

    Notice that the XML file does not have a reference to the XSL file.
    注意XML文件与XSL文件并无关联。

    IMPORTANT: The above sentence indicates that an XML file could be transformed using many different XSL style sheets.
    重点: 上面的句子指出,一个XML文件可以通过使用许多不同的XSL样式表进行转换。


    Transforming XML to XHTML in the Browser
    在浏览器中把XML文件转换成XHTML

    Here is the source code needed to transform the XML file to XHTML on the client:
    这儿的源代码需要在客户端把XML文件转换成XHTML。

    <html>
    <body>
    <script type="text/javascript">
    // Load XML 
    var xml = new ActiveXObject("Microsoft.XMLDOM")
    xml.async = false
    xml.load("cdcatalog.xml")
    // Load XSL
    var xsl = new ActiveXObject("Microsoft.XMLDOM")
    xsl.async = false
    xsl.load("cdcatalog.xsl")
    // Transform
    document.write(xml.transformNode(xsl))
    </script>
    </body>
    </html>

    Tip: If you don't know how to write JavaScript, you can study our JavaScript tutorial.
    提示:
    如果你不知道怎么写JavaScript,你可以看一下我们的JavaScript 教程.

    The first block of code creates an instance of the Microsoft XML parser (XMLDOM), and loads the XML file into memory. The second block of code creates another instance of the parser and loads the XSL file into memory. The last line of code transforms the XML document using the XSL document, and displays the result as XHTML in your browser. Nice!
    第一块代码创建了一个微软的XML文件解析器(XMLDOM)的实例,并把XML文件加载到存储器中。第二块代码创建了另外一个解析器的实例,并且把XML文件加载到存储器中。最后一行的代码通过使用XSL文件来转换XML文件,并在浏览器中以XHTML的形式显示结果。

    See how it works in IE.
    了解其在IE中的运行情况。

    服务器上的XSLT
    w3pop.com / 2006-09-20

    Since not all browsers support XSLT, one solution is to transform the XML to XHTML on the server.
    因为不是所有的浏览器都支持XSLT,所以人们提出了一个在服务器端把XML转换成XHTML的解决方案。


    A Cross Browser Solution
    一个交叉浏览器解决方案

    In the previous chapter we explained how XSLT can be used to transform a document from XML to XHTML in the browser. We created a JavaScript that used an XML parser to do the transformation. The JavaScript solution will not work in a browser that doesn't have an XML parser.
    在前一章我们解释了怎样在浏览器中用XSLT把文件从XML转换成XHTML。我们创建了一个用XML解析器来做转换的JavaScript。JavaScript解决程序将不会在没有XML解析器的浏览器上运行。

    To make XML data available to all kind of browsers, we must transform the XML document on the SERVER and send it as XHTML back to the browser.
    想使XML数据对各种浏览器都适用,我们必须在服务器上转换XML文件,并把它以XHTML的形式发送回浏览器。

    That's another beauty of XSLT. One of the design goals for XSLT was to make it possible to transform data from one format to another on a server, returning readable data to all kinds of browsers.
    这是XSLT的另一个魅力。XSLT的其中一个设计目标就是能够让它在服务器端将数据从一种格式转化为另一种格式,并把所有可读的数据返回到各种浏览器上。


    The XML File and the XSLT File
    XML文件和XSLT文件

    Look at the XML document that you have seen in the previous chapters:
    下面我们来回顾一下前一章使用过的XML文件:

    <?xml version="1.0" encoding="ISO-8859-1"?>

    <catalog>
    <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>

    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
    </cd>

    .
    .
    .
    </catalog>

    View the XML file.
    查看XML文件。.

    And the accompanying XSL style sheet:
    附随的XSL样式表:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">

    <html>
    <body>
    <h2>My CD Collection</h2>
    <table border="1">
    <tr bgcolor="#9acd32">

    <th align="left">Title</th>
    <th align="left">Artist</th>
    </tr>
    <xsl:for-each select="catalog/cd">

    <tr>
    <td><xsl:value-of select="title" /></td>
    <td><xsl:value-of select="artist" /></td>

    </tr>
    </xsl:for-each>
    </table>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>

    View the XSL file.
    XSL文件.

    Notice that the XML file does not have a reference to the XSL file.
    注意XML文件和XSL文件并无关联

    IMPORTANT: The above sentence indicates that an XML file could be transformed using many different XSL style sheets.
    重点:上面的句子指出:XML文件不应该通过不同的XSL样式表进行转换。


    Transforming XML to XHTML on the Server
    在服务器端把XML转换成XHTML

    Here is the ASP source code needed to transform the XML file to XHTML on the server:
    这儿的动态服务器主页(ASP)源代码需要在服务器端把XML文件转换成XHTML。

    <%
    'Load XML
    set xml = Server.CreateObject("Microsoft.XMLDOM")
    xml.async = false
    xml.load(Server.MapPath("cdcatalog.xml"))

    'Load XSL
    set xsl = Server.CreateObject("Microsoft.XMLDOM")
    xsl.async = false
    xsl.load(Server.MapPath("cdcatalog.xsl"))

    'Transform file
    Response.Write(xml.transformNode(xsl))
    %>

    Tip: If you don't know how to write ASP, you can study our ASP tutorial.
    提示:
    如果你不知道怎样书写ASP,你可以了解一下ASP 教程

    The first block of code creates an instance of the Microsoft XML parser (XMLDOM), and loads the XML file into memory. The second block of code creates another instance of the parser and loads the XSL file into memory. The last line of code transforms the XML document using the XSL document, and sends the result as XHTML to your browser. Nice!
    第一块代码创建了一个微软XML解析器(XMLDOM)的实例,并把此文件加载到存储器里。第二块代码创建了另外一个解析器的实例,并把XSL文件加载到存储器中。最后一行代码通过使用XSL文件来转换XML文件,并将其以XHTML的形式把结果发到浏览器上。真棒!

    See how it works.
    看它是怎样工作的.

    XSLT - 编辑XML
    w3pop.com / 2006-09-20

    p.gif服务器上的XSLT XSLT 摘要 n.gif

    Data stored in XML files can be edited from an Internet browser.
    储存在XML文件中的数据可以在英特网浏览器上进行编辑。


    Open, Edit and Save XML
    打开、编辑和保存XML的方法

    Now, we will show how to open, edit, and save an XML file that is stored on the server.
    现在我们将演示一下如何打开、编辑和保存一份储存在服务器上的XML文件。

    We will use XSL to transform the XML document into an HTML form. The values of the XML elements will be written to HTML input fields in an HTML form. The HTML form is editable. After editing the data, the data is going to be submitted back to the server and the XML file will be updated (this part is done with ASP).
    我们将用XSL来把XML 文档转换成HTML形式。XML元素值将以HTML的格式写入HTML输入域(input field)。HTML的格式是可以被编辑的。数据被编辑之后将被重新传回服务器,XML也将被升级(这份HTML元素值将被写到HTML表格中的HTML输入栏)。


    The XML File and the XSL File
    XML文件和XSL文件

    First, look at the XML document that will be used ("tool.xml"):
    首先,来看一下要用到的 XML文件("tool.xml"):

    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <tool>
      <field id="prodName">
        <value>HAMMER HG2606</value> 
      </field>
      <field id="prodNo">
    
        <value>32456240</value> 
      </field>
      <field id="price">
        <value>$30.00</value> 
      </field>
    
    </tool>

    View the XML file.
    XML文件.

    Then, take a look at the following style sheet ("tool.xsl"):
    让我们看一下下面的样式表("tool.xsl"):

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    
    <html>
    <body>
    <form method="post" action="edittool.asp">
    <h2>Tool Information (edit):</h2>
    <table border="0">
    
    <xsl:for-each select="tool/field">
    <tr>
    <td>
    <xsl:value-of select="@id"/>
    </td>
    <td>
    <input type="text">
    
    <xsl:attribute name="id">
      <xsl:value-of select="@id" />
    </xsl:attribute>
    <xsl:attribute name="name">
      <xsl:value-of select="@id" />
    
    </xsl:attribute>
    <xsl:attribute name="value">
      <xsl:value-of select="value" />
    </xsl:attribute>
    </input> 
    </td>
    
    </tr>
    </xsl:for-each>
    </table>
    <br />
    <input type="submit" id="btn_sub" name="btn_sub" value="Submit" />
    
    <input type="reset" id="btn_res" name="btn_res" value="Reset" />
    </form>
    </body>
    
    </html>
    </xsl:template>
    </xsl:stylesheet>

    View the XSL file.
    XSL文件.

    The XSL file above loops through the elements in the XML file and creates one input field for each XML "field" element. The value of the XML "field" element's "id" attribute is added to both the "id" and "name" attributes of each HTML input field. The value of each XML "value" element is added to the "value" attribute of each HTML input field. The result is an editable HTML form that contains the values from the XML file.
    上面的XSL文件对XML文件里的元素进行循环,并为每一个XML域(field)创建了输入域(input field)。XML“域(field)”元素的ID属性值被添加到每个HTML输入域(input field)的“ID”和“名字”属性中。每个XML“值(value)”元素的值要被添加到每个HTML输入域的“值”属性里。结果是一个可编辑的HTML表格包含了来自XML文件中的值。

    Then, we have a second style sheet: "tool_updated.xsl". This is the XSL file that will be used to display the updated XML data. This style sheet will not result in an editable HTML form, but a static HTML table:
    接下来,我们开始第二个样式表:"tool_updated.xsl"。这是用来显示最新的XML数据的XSL文件。这个样式表不会产生一个可编辑HTML表格,但是会产生一个静态的HTML表格:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <html>
    <body>
    <h2>Updated Tool Information:</h2>
    
    <table border="1">
    <xsl:for-each select="tool/field">
    <tr>
    <td><xsl:value-of select="@id" /></td>
    <td><xsl:value-of select="value" /></td>
    
    </tr>
    </xsl:for-each>
    </table>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>

    View the XSL file.
    XSL文件.


    The ASP File
    ASP文件

    The HTML form in the "tool.xsl" file above has an action attribute with a value of "edittool.asp".
    上面"tool.xsl" 文件中,HTML的构成具有"edittool.asp"值的行为属性。

    The "edittool.asp" page contains two functions: The loadFile() function loads and transforms the XML file for display and the updateFile() function applies the changes to the XML file:
    "edittool.asp"页包含了2个函数:loadFile()函数是用来加载和转换XML文件的,目的在于将其显示出来;updateFile()函数的作用是把所有的这些改变应用于XML文件。

    <%
    function loadFile(xmlfile,xslfile)
    Dim xmlDoc,xslDoc
    'Load XML file
    set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
    xmlDoc.async = false
    xmlDoc.load(xmlfile)
    'Load XSL file
    set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
    xslDoc.async = false
    xslDoc.load(xslfile)
    'Transform file
    Response.Write(xmlDoc.transformNode(xslDoc))
    end function
    function updateFile(xmlfile)
    Dim xmlDoc,rootEl,f
    Dim i
    'Load XML file
    set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
    xmlDoc.async = false
    xmlDoc.load(xmlfile)
    'Set the rootEl variable equal to the root element
    Set rootEl = xmlDoc.documentElement
    'Loop through the form collection
    for i = 1 To Request.Form.Count
      'Eliminate button elements in the form
      if instr(1,Request.Form.Key(i),"btn_")=0 then
        'The selectSingleNode method queries the XML file for a 
        'single node that matches a query. This query requests
        'the value element that is the child of a field element
        'that has an id attribute which matches the current key
        'value in the Form Collection. When there is a match -
        'set the text property equal to the value of the current
        'field in the Form Collection.
        set f = rootEl.selectSingleNode("field[@id='" & _
        Request.Form.Key(i) & "']/value")
        f.Text = Request.Form(i)
      end if
    next
    'Save the modified XML file
    xmlDoc.save xmlfile
    'Release all object references
    set xmlDoc=nothing
    set rootEl=nothing
    set f=nothing
    'Load the modified XML file with a style sheet that
    'allows the client to see the edited information
    loadFile xmlfile,server.MapPath("tool_updated.xsl")
    end function
    'If the form has been submitted update the
    'XML file and display result - if not,
    'transform the XML file for editing
    if Request.Form("btn_sub")="" then
    loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl")
    else
    updateFile server.MapPath("tool.xml")
    end if
    %>

    Tip: If you don't know how to write ASP, you can study our ASP tutorial.
    提示: 如果你还不会写ASP文件的话请学习我们的ASP 教程.

    Note: We are doing the transformation and applying the changes to the XML file on the server. This is a cross-browser solution. The client will only get HTML back from the server - which will work in any browser.
    注意: 我们可以进行转换,并把这些改变应用到在服务器上的XML文件。这将是一个交互式浏览器的解决方案。客户端只要从浏览器获取HTML值就可以了,而且所有的浏览器都具备这样的功能。

    XSLT 摘要
    w3pop.com / 2006-09-20

    This tutorial has taught you how to use XSLT to transform XML documents into other formats, like XHTML.
    这份教程已经教会了你如何通过XSLT把XML文档转换成其他格式。诸如:XHTML。

    You have learned how to add/remove elements and attributes to or from the output file.
    你已经学会了怎么从结果文件里添加/移除元素和属性或者将元素和属性添加/移除到结果文件里。

    You have also learned how to rearrange and sort elements, perform tests and make decisions about which elements to hide and display.
    你也已经学会了怎么再排列和分类元素,完成测试以及决定隐藏或显示哪些元素。

    For more information on XSLT, please look at our XSLT reference.
    如想获取更多XSLT信息,请阅读XSLT 参考.


    Now You Know XSLT, What's Next?
    现在你知道了XSLT,那下一步呢?

    XSL includes 3 languages: XSLT, XPath and XSL-FO, so the next step is to learn about XPath and XSL-FO.
    XSL包含了3种语言:XSLT, XPath 和XSL-FO,所以下一步应该学习的是XPath 和XSL-FO。

    XPath

    XPath is used to navigate through elements and attributes in an XML document.
    XPath作用是XML文件中的元素和属性进行操作。

    XPath is a major element in the W3C's XSL standard. An understanding of XPath is fundamental for advanced use of XML.
    XPath是W3C XSL标准中的一个主要元素。掌握XPath进一步开发XML的基础。

    Without any XPath knowledge, you will not be able to create XSLT documents.
    没有任何XPath这方面的知识,你不可能创建XSLT文件。

    If you want to learn more about the XPath, please visit our XPath tutorial.
    如果你想学习更多XPath,请访问我们的 XPath 教程.

    XSL-FO

    XSL-FO describes the formatting of XML data for output to screen, paper or other media.
    XSL-FO描述的是输出到屏幕、文件、以及其他媒体的XML数据的格式。

    XSL-FO documents are XML files with information about the output layout and output content.
    XSL-FO文件是含有关于输出版面和输出内容信息的XML文件。

    If you want to learn more about XSL-FO, please visit our XSL-FO tutorial.
    如果你想学到更多XSL-FO,请访问我们的 XSL-FO 教程.

    XSLT 元素参考
    w3pop.com / 2006-09-20

    The XSLT elements from the W3C Recommendation (XSLT Version 1.0).
    来自W3C参考标准所定义(XSLT版本1.0)的XSLT元素。


    XSLT Elements
    XSLT元素

    The links in the "Element" column point to attributes and more useful information about each specific element.
    “元素”列中的链接指出每个特殊元素的属性和更多有用的信息。

    • N: indicates the earliest version of Netscape that supports the tag
      N: 指出Netscape最早版本的支持标签。
    • IE: indicates the earliest version of Internet Explorer that supports the tag
      IE: 指出最早的支持标签的IE版本。

    Note: Elements supported in IE 5 may have NON-standard behavior, because IE 5 was released before XSLT became an official W3C Recommendation.
    注意: 在IE5中被支持的元素可能含有非标准的行为(NON-standard behavior),因为IE5在XSLT成为W3C的官方参考标准之前就已经发布了。

    Element
    元素
    Description
    描述
    IE N
    apply-imports Applies a template rule from an imported style sheet
    应用输入样式表的模版规则
    6.0  
    apply-templates Applies a template rule to the current element or to the current element's child nodes
    把模版规则应用到当前元素或当前元素的子元素
    5.0 6.0
    attribute Adds an attribute
    添加属性
    5.0 6.0
    attribute-set Defines a named set of attributes
    定义指定属性
    6.0 6.0
    call-template Calls a named template
    调用指定模版
    6.0 6.0
    choose Used in conjunction with <when> and <otherwise> to express multiple conditional tests
    通过与<when> 和<otherwise>配合使用来表达多种条件测试
    5.0 6.0
    comment Creates a comment node in the result tree
    在结果树中创建一个注释节点
    5.0 6.0
    copy Creates a copy of the current node (without child nodes and attributes)
    复制正确节点(不需要子节点和属性)
    5.0 6.0
    copy-of Creates a copy of the current node (with child nodes and attributes)
    复制正确节点(需要子节点和属性)
    6.0 6.0
    decimal-format Defines the characters and symbols to be used when converting numbers into strings, with the format-number() function
    定义字符和符号(在通过format-number() 函数,把数字转换成字符的情况下)
    6.0  
    element Creates an element node in the output document
    在输出文档中创建一个元素节点
    5.0 6.0
    fallback Specifies an alternate code to run if  the processor does not support an XSLT element
    如果处理器不支持XSLT元素,则运行指定的预备代码
    6.0  
    for-each Loops through each node in a specified node set
    在指定的节点设置中通过每个节点做循环
    5.0 6.0
    if Contains a template that will be applied only if a specified condition is true
    包含一个只当指定条件为true时才应用的模版
    5.0 6.0
    import Imports the contents of one style sheet into another. Note: An imported style sheet has lower precedence than the importing style sheet
    把一个样式表内容输入到另外一个样式表去。注意:与已输入的样式表相比,正在输入的样式表更具有优先权。
    6.0 6.0
    include Includes the contents of one style sheet into another. Note: An included style sheet has the same precedence as the including style sheet
    把一份样式表的内容嵌到另一份中去 。注意:这两份样式表有相同的优先级。
    6.0 6.0
    key Declares a named key that can be used in the style sheet with the key() function
    通过key() 函数,声明可以用于样式表的指定键
    6.0 6.0
    message Writes a message to the output (used to report errors)
    编写信息到输出(用于报告错误)
    6.0 6.0
    namespace-alias Replaces a namespace in the style sheet to a different namespace in the output
    在样式表中把命名空间(namespace)替换成一个不同的命名空间输出
    6.0  
    number Determines the integer position of the current node and formats a number
    确定当前节点和格式数字的整形位置
    6.0 6.0
    otherwise Specifies a default action for the <choose> element
    指定<choose>元素的错误行为
    5.0 6.0
    output Defines the format of the output document
    定义输出文件的格式
    6.0 6.0
    param Declares a local or global parameter
    声明本地或是全球的参数
    6.0 6.0
    preserve-space Defines the elements for which white space should be preserved
    定义储存空白页的元素
    6.0 6.0
    processing-instruction Writes a processing instruction to the output
    编写输出的处理结构
    5.0 6.0
    sort Sorts the output
    分类输出
    6.0 6.0
    strip-space Defines the elements for which white space should be removed
    定义移除空白页的元素
    6.0 6.0
    stylesheet Defines the root element of a style sheet
    定义样式表的根元素
    5.0 6.0
    template Rules to apply when a specified node is matched
    当指定节点匹配时应用的规则
    5.0 6.0
    text Writes literal text to the output
    编写文字文本到输出
    5.0 6.0
    transform Defines the root element of a style sheet
    定义样式表的根元素
    6.0 6.0
    value-of Extracts the value of a selected node
    摘取选定节点值
    5.0 6.0
    variable Declares a local or global variable
    定义本地或全球变量
    6.0 6.0
    when Specifies an action for the <choose> element
    指定<choose>元素的行为
    5.0 6.0
    with-param Defines the value of a parameter to be passed into a template
    定义模版内的参数值
    6.0 6.0

    XSLT 函数
    w3pop.com / 2006-09-20

    XQuery 1.0, XPath 2.0, and XSLT 2.0 share the same functions library.
    XQuery 1.0, XPath 2.0, 和XSLT 2.0共享一个函数库。


    XSLT Functions
    XSLT函数

    XSLT includes over 100 built-in functions. There are functions for string values, numeric values, date and time comparison, node and QName manipulation, sequence manipulation, Boolean values, and more.
    XSLT包含了超过100个内置函数。有些是为了字符串值,数字值,数据和时间比较关系,节点和OName操作,序列操作,布尔(逻辑)值,以及更多。

    The URI of the XSLT function namespace is:http://www.w3.org/2005/02/xpath-functions
    XSLT函数命名空间的URI是http://www.w3.org/2005/02/xpath-functions

    The default prefix for the function namespace is fn:.
    函数命名空间的默认前缀是“fn”:

    Tip: Functions are often called with the fn: prefix, such as fn:string(). However, since fn: is the default prefix of the namespace, the function names do not need to be prefixed when called.
    提示: 函数经常用“fn”命名:前缀,就像“fn:string()”;当然,自“fn:”后,是命名空间(namespace)的默认前缀,但当被访问时,函数名称不需要前缀。

    The reference of all the built-in XSLT 2.0 functions is located in our XPath tutorial.
    在XSLT2.0 函数中所有内置的参数都在我们XPath教程里面。

    In addition, there are the following built-in XSLT functions:
    另外,还有下面的内置XSLT函数:

    Name
    名称
    Description
    描述
    current() Returns the current node
    返回当前节点
    document() Used to access the nodes in an external XML document
    用来访问一个外部的XML文档内的节点
    element-available() Tests whether the element specified is supported by the XSLT processor
    测试指定的元素是否被XSLT处理器支持
    format-number() Converts a number into a string
    将数字转化为字符串
    function-available() Tests whether the function specified is supported by the XSLT processor
    测试指定的函数是否被XSLT处理器支持
    generate-id() Returns a string value that uniquely identifies a specified node
    返回一个独立地定义一个指定节点的字符串值
    key() Returns a node-set using the index specified by an <xsl:key> element
    使用由<xsl:key>元素指定的索引来返回一个节点设置(node-set)
    system-property() Returns the value of the system properties
    返回系统属性值
    unparsed-entity-uri() Returns the URI of an unparsed entity
    返回一个未被解析的URI实体

    转载于:https://www.cnblogs.com/xujiaci/archive/2007/08/31/877198.html

    展开全文
  • XSLT教程

    千次阅读 2017-10-30 12:07:36
    XSLT教程

    XSL代码

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
    <xsl:template match="/">
     <html>
     <body>
       <h2>My CD Collection</h2>
       <table border="1">
         <tr bgcolor="#9acd32">
           <th>Title</th>
           <th>Artist</th>
         </tr>
         <tr>
          <td><xsl:value-of select="catalog/cd/title"/></td>
          <td><xsl:value-of select="catalog/cd/artist"/></td>
         </tr>
       </table>
     </body>
     </html>
    </xsl:template>
    
    </xsl:stylesheet>

    XML代码

    <catalog>
    <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
    </cd>
    <cd>
    <title>Hide your heart</title>
    <artist>Bonnie Tyler</artist>
    <country>UK</country>
    <company>CBS Records</company>
    <price>9.90</price>
    <year>1988</year>
    </cd>
    </catalog>

    1.声明

    由于 XSL 样式表本身也是一个 XML 文档,因此它总是由 XML 声明起始:

    <?xml version="1.0" encoding="ISO-8859-1"?>

    2.命名空间`

    `定义此文档是一个 XSLT 样式表文档(连同版本号和 XSLT 命名空间属性)。例如:

    <xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    3.定义模板

    <xsl:template> 元素定义了一个模板。而 match=”/” 属性则把此模板与 XML 源文档的根相联系。
    <xsl:template> 元素内部的内容定义了写到输出结果的 HTML 代码。

    4.<xsl:value-of> 元素

    a.<xsl:value-of> 元素用于提取某个选定节点的值,并把值添加到转换的输出流中。
    b.select 属性的值是一个 XPath 表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。
    例如:

     <td><xsl:value-of select="catalog/cd/title"/></td>

    5.<xsl:for-each> 元素

    a. <xsl:for-each> 元素可用于选取指定的节点集中的每个 XML 元素。
    例如:

      <xsl:for-each select="catalog/cd">
          <tr>
            <td><xsl:value-of select="title"/></td>
            <td><xsl:value-of select="artist"/></td>
          </tr>
      </xsl:for-each>

    b.<xsl:for-each> 添加一个选择属性的判别式
    合法的过滤运算符:
    = (等于)
    != (不等于)
    < (小于)
    > (大于)
    例如:过滤元素artist 元素等于a的代码如下:

    <xsl:for-each select="catalog/cd[artist='a']">

    c.<xsl:sort> 元素用于对结果进行排序
    在 XSL 文件中的 <xsl:for-each> 元素内部添加一个 <xsl:sort> 元素:
    对artist进行排序:

     <xsl:for-each select="catalog/cd">
         <xsl:sort select="artist"/>
          <tr>
            <td><xsl:value-of select="title"/></td>
            <td><xsl:value-of select="artist"/></td>
          </tr>
          </xsl:for-each>

    6.<xsl:if> 元素

    <xsl:if test="expression">
      ...
      ...如果条件成立则输出...
      ...
    </xsl:if>

    例如:代码仅仅会输出价格高于 10 的 CD 的 title 和 artist 元素。

      <xsl:for-each select="catalog/cd">
          <xsl:if test="price &gt; 10">
            <tr>
              <td><xsl:value-of select="title"/></td>
              <td><xsl:value-of select="artist"/></td>
            </tr>
          </xsl:if>
          </xsl:for-each>

    7.<xsl:choose> 元素

    类似与switch语句

    <xsl:choose>
      <xsl:when test="expression">
        ... 输出 ...
      </xsl:when>
      <xsl:otherwise>
        ... 输出 ....
      </xsl:otherwise>
    </xsl:choose>

    例如:代码会在 CD 的价格高于 10 时向 “Artist” 列添加粉色的背景颜色。

     <xsl:for-each select="catalog/cd">
          <tr>
            <td><xsl:value-of select="title"/></td>
            <xsl:choose>
              <xsl:when test="price &gt; 10">
                <td bgcolor="#ff00ff">
                <xsl:value-of select="artist"/></td>
              </xsl:when>
              <xsl:otherwise>
                <td><xsl:value-of select="artist"/></td>
              </xsl:otherwise>
            </xsl:choose>
          </tr>
          </xsl:for-each>
    展开全文
  • xslt简介_XSLT简介

    2020-06-18 13:26:25
    本教程适用于希望使用可扩展样式表语言转换(XSLT)将XML数据转换为其他形式而无需使用Java™或其他语言进行编程的开发人员。 本教程假定您熟悉XML,但没有涉及该语言的任何深奥的方面,因此基本的了解就足够了。...
  • XSLT

    2018-12-18 19:22:03
    &amp;lt;xsl:template&amp;gt; 元素 &amp;lt;xsl:template&amp;gt; 元素用于构建模板。 match 属性用于关联 XML...注意:由于 XSL 样式表本身也是一个 XML 文档,因此它总是由 XML 声明起始:&...lt
  • XSLT

    千次阅读 热门讨论 2014-03-19 21:06:43
    一、xsl 不清楚xsl是什么,我们可以通过如下对比,来理解。   CSS XSL 定义 ...不使用预先定义的标签(我们可以使用任何喜欢的标签名),并且这些标签的意义并不都那么容易被理解
  • XSLT

    2016-05-31 19:30:18
    XSLT 一、XSLT语言 它起始于 XSL,结束于 XSLT、XPath 以及 XSL-FO。 1、起始于 XSL  XSL 指扩展样式表语言(EXtensible Stylesheet Language)。万维网联盟 (W3C) 开始发展 XSL 的原因是:存在着对于基于 XML 的...
  • 1.XSLT的概念 1.1 什么是XSLT 1.2 为什么要用XSLT 1.3 XSLT的历史 1.4 什么是XPath 1.5 XSLT和CSS的比较 1.6 XSLT和IE5 1.XSLT的概念我们首先来澄清一个概念,大家可能听说过XSL(eXtensible Stylesheet Language),...
  • XSLT轻松入门第一章:XSLT的概念     1.XSLT的概念  1.1 什么是XSLT  1.2 为什么要用XSLT  1.3 XSLT的历史  1.4 什么是XPath  1.5 XSLT和CSS的比较  1.6 XSLT和IE5  1....
  • XSLT 是什么类型的语言? 分析和概述 级别: 初级Mi
  • XSLT

    2007-04-29 17:24:00
    XSLT是什么类型的语言,其用途是什么,为什么要这样设计它?这些问题可以有许多不同的答案,初学者往往会感到困惑,因为这种语言与他们以前习惯使用的语言之间有很大差别。本文尝试说明XSLT。本文并不试图教您编写 ...
  • xslt

    2008-07-29 15:43:00
    // Load XML var xml = new ActiveXObject("Microsoft.XMLDOM")xml.async = falsexml.load("cdcatalog.xml")// Load XSLvar xsl = new ActiveXObject("Microsoft.XMLDOM")xsl.async = falsexsl.load("cdcatalog.xsl
  • XSLT

    2010-12-08 17:05:00
    XSLT 是一种用于将 XML 文档转换为 XHTML 文档或其他 XML 文档的语言; XPath 是一种用于在 XML 文档中进行导航的语言; 本文目录 1、XSLT的主要功能 2、XSLT是如何工作的 3、正确的样式表声明 4、创建XSLT样式...
  • XSLT

    2007-08-22 15:39:00
    1 XML to XML with XSLThttp://www.topxml.com/xsltStylesheets/xslt_XML_to_XML.asp 举例说明如何将xml中不同类型的元素通过xslt转换另一个xml。2 XSLT中文入门...
  • XSLT

    2007-01-23 06:22:00
    1. 什么是XSLT 大家可能听说过XSL(eXtensible Stylesheet Language),XSL和我们这里说的XSLT从狭义上理解是一样的,而按照W3C的标准,XSLT的说法更严格些,因此我们在文章中统一使用XSLT的称法。XSLT的英文标准...
  • XSLT

    2005-02-03 08:19:00
    左边的XML链接增加了一个XSLT的FAQ站点——Dave Pawsons Home page,XSLT FAQ. Docbook FAQ. Braille.。本文下面再加上一篇文章的链接,算是对这些天学习XSLT的一个小结。XML数据的XSLT转换过程中的数据分组方法探讨
  • XSLT介绍

    千次阅读 2011-07-26 09:36:33
    XSL即可扩展的样式表文件。 可以格式化xml的显示,也可以将xml转换成需要的另一种格式。学习XSL必须熟悉XPath。XSL和XPath一样简单强大,容易学习。1. XSL既然可以格式化xml的显示样式,我们先来看如何在xml中引用...
  • Xslt

    2018-07-10 23:37:00
    2019独角兽企业重金招聘Python工程师标准>>> ...

空空如也

1 2 3 4 5 ... 20
收藏数 46,737
精华内容 18,694
关键字:

xslt