《XML基础教程与实验指导》 第5章 XSL转换XML文档

  • XML + CSS
    示例
  • XML + CSS + HTML + JavaScript
    示例
  • XML + XSL 示例
  • XML + XSL
    示例超链接问题
  • xml-stylesheet 还是
    xml:stylesheet?
  • xsl:stylesheet 还是 xsl:transform 还是
    xsl-stylesheet?
  • 为什么 XSL
    不流行?
  • XML + XSL 在 IE 中有效,在 Firefox
    中无效?
  • XML + CSS
    示例
  • XML + CSS + HTML + JavaScript
    示例
  • XML + XSL
    示例
  • XML + XSL 示例超链接问题
  • xml-stylesheet 还是
    xml:stylesheet?
  • xsl:stylesheet 还是 xsl:transform 还是
    xsl-stylesheet?
  • 为什么 XSL
    不流行?
  • XML + XSL 在 IE 中有效,在 Firefox
    中无效?

第5章  XSL转换XML文档



  XML关于文档浏览的基本思想是将数据与数据的显示分别定义。这样一来,XML格式文档不会重蹈某些HTML文档结构混杂、内容繁乱的覆辙,XML的编写者也可以集中精力于数据本身,而不受显示方式的细枝末节的影响。定义不同的样式表可以使相同的数据呈现出不同的显示外观,从而适合于不同应用,甚至能够在不同的显示设备上显示。这样,XML数据就可以得到最大程度上的重用性,满足不同的应用需求。XML数据的显示可以采用CSS和XSL样式文件实现。

可以把 CSS 理解为 HTML 的样式表,把 XSL 理解为 XML 的样式表。

XML 文件

本章知识要点:
掌握XSL的基本概念
熟练掌握XSL转换原理
掌握XSL文档创建和使用
了解CSS和XSL的区别
掌握XSL模板规则和调用
熟练掌握不同的方式选择节点
掌握XSL常见的控制指令
熟练掌握XSL与CSS的结合使用

XSL 是可扩展样式语言(EXtensible Stylesheet Language),XSL 包括三部分:

<?xml version=”1.0″ encoding=”gb2312″ ?>
<?xml-stylesheet type=”text/xsl” href=”xsl.xsl”
?>
<root>
    <name>千一网络</name>
    <url>;
</root>

5.1  XSL介绍

  • XSLT 一种用于转换 XML 文档的语言,XSL 中最重要的部分,使用 XPath
    查找 XML 文档中的信息。
  • XPath 一种用于在 XML 文档中导航的语言。
  • XSL-FO 一种用于格式化 XML 文档的语言。

XSL 文件

  XSL是专门针对于XML文档的样式提出来的一种规则,使XML文档得到更加有效的表现形式,XSL文档实际上是XML文档的一种延伸,是依据XML制成的样式语言。通过XSL文档可以对XML进行样式设置、计算、整理和排序等,XSL比CSS要复杂的多。

本节演示用 XSLT 来转换 XML 语言。

<?xml version=”1.0″ encoding=”gb2312″ ?>
<xsl:stylesheet version=”1.0″
xmlns:xsl=”;
    <xsl:template match=”/”>
        <html>
          <head></head>
          <body>
          <xsl:apply-templates />
          </body>
        </html>
    </xsl:template>
   
    <xsl:template match=”root”>
        <p>
            <xsl:element name=”a”>
                <xsl:attribute name=”href”><xsl:value-of
select=”url”></xsl:value-of></xsl:attribute>
                <xsl:attribute
name=”target”>_blank</xsl:attribute>
                <xsl:value-of select=”url”></xsl:value-of>
            </xsl:element>
        </p>
    </xsl:template>
</xsl:stylesheet>

5.1.1  XSL概念

XML 文件

现象

  XSL是为XML的样式显示设计的语言,该语言定义一系列的元素集的XML的语法规范,该语法规定可把XML文件转换成HTML、XML或其他的文档。一个XSL的样式表单里面包含的是多个设计规则,显示方式,从XML文档中提出来的数据依据这个样式表单规定显示方式显示,形成一个新的文档。这种转换采用公开的方式,使其更加容易、方便的程序员使用。XSL还提供多种脚本语言的通道,可以满足语言对其的操作,以满足更为复杂的应用需求。XSL是一种新的标记语言,它的可扩展性,使得它可以控制出现的标记。

<?xml version=”1.0″ encoding=”gb2312″ ?>
<?xml-stylesheet type=”text/xsl” href=”xsl.xsl”
?>
<root>
    <name>千一网络</name>
    <url>;
</root>

显示一个超链接,点击它在新窗口中打开一个网页。

5.1.2  XSL转换原理

XSL 文件

  XSL工作原理就是把XML文档作为一个存储数据的树来看待,称它为源树。XML文档的根元素和子元素可以看作是树节点。XSL就是把这些存放数据根据我们自己的需要从XML树中提去出来,组成一个新的树,也就是结果树。结果树和源树是独立存在的,对结果树中的数据操作不会影响到源树中的数据,XSL正是通过这种方式实现了数据和表示分离的目的。而XSL提取数据的工具就是XSL处理器,XSL处理器首先根据要找的节点在源树中寻找,其寻找方式就是上面描述的情形。数据提取到之后,就到XSL文档中,找到与这个节点匹配的样式定义。按定义好的样式显示数据,即形成了一个新的文档树。

<?xml version=”1.0″ encoding=”gb2312″ ?>
<xsl:stylesheet version=”1.0″
xmlns:xsl=”;
    <xsl:template match=”/”>
        <html>
          <head>
              <title><xsl:apply-templates select=”/root/name”
/></title>
          </head>
          <body>
          <xsl:apply-templates />
          </body>
        </html>
    </xsl:template>
   
    <xsl:template match=”/root/name”>
        <xsl:value-of select=”.” />
    </xsl:template>
   
    <xsl:template match=”root”>
        <p><xsl:value-of select=”url” /></p>
    </xsl:template>
</xsl:stylesheet>

5.1.3  XSL文档创建与应用

现象

  XSL是基于XML的语言,即XSL文件是一种格式良好的XMI文件,因此它和XML文件在语法上是一致的。事实上,由于XML是元语言,所以它具备描述其他语言的能力,或者说它可以通过XML来制定另一种语言。XSL就是用XML来描述的一种使用于定义样式的语言,并且XSL所定义的样式专门用于XML文档。因此,所有的XSL文件都应该是格式良好的XML文件,只不过XSL文件的扩展名是“xsl”,而不再是“xml”。

在 IE、Firefox 中均会看到一个标题为“千一网络”、内容为一个 URL 的网页。

5.1.4  XSL与CSS比较

  XSL可以非常容易的操作。XSL采用了和CSS文档处理样式的不同方法。它能将一种格式XML文档转换成另外一种,可以满足服务器针对不同的用户显示不同的样式。XSL的另外一个特点就是支持中文,在CSS的编写中,CSS不支持中文。这对于喜欢使用中文的用户,是更有理由使用XSL。而XSL虽然功能强大,学习和理解起来比较难,并且因为要重新索引xml(标准化越来越近了)结构树,所以消耗内存比较多。

5.2  XSL模板

  XSL样式表单是由一个或多个被称为“模板”的规则集组成的。每个模板都包含了与每一个指定节点相匹配的应用规则。模板规则包含两个部分:模式(pattern)和模板(template)。模式用于在源文档中匹配(定位)节点,模板定义节点的处理规则,通过模板的实例化来组成结果树的一部分。

5.2.1  XSL模板规则

  XSL样式表单的扩展名是“.xsl”的文本文件,和XML文档类型,XSL样式表单的内容也是有标记及其内容组成,只不过按照W3C规范,这些标记都有着特殊的意义,以便XSL处理器可以处理它们。XSL样式表单遵守和XML一样的语法要求,它必须是规范的。
XSL样式表单的目的是为和其关联的XML文件提供数据显示的外观,这样,XSL样式表单中的标记就经常要和XML文件中的标记发生联系,为了不引起混乱,我们将XSL样式表单中的标记称为XSL标记,将XML文件中的标记称为XML标记。

5.2.2  XSL模板调用

  <xsl:apply-templates>元素用于告诉XSL处理器处理当前节点的所有子节点。在转换XML文档时,往往需要递归处理文档树中每一个节点,可以使用<xsl:apply-templates>完成这个操作。在模板规则的模板中使用<xsl:apply-templates>元素,告诉XSL处理器将匹配的节点每一个节点(包括文本节点)与样式表中的模式规则进行比较,如果找到了匹配的模板规则,那么就可以为匹配的节点输出模板。当然了,在匹配的节点模板中还可以再包含<xsl:
apply-templates>元素,从而通知处理器处理该节点的所有子节点,这样依次调用,就可以完成对文档树中所有节点处理。

5.3  XSL节点选择

  “标记匹配模式”就是描述该模板适用于那个标记,也可能有多个标记。“标记匹配模式”就是满足一定条件的一组XML标记,其中每个XML标记都称作匹配模式的XML标记。实际上“标记匹配模式”就是告诉模板如何在XML文档中选择节点。

5.3.1  使用元素名选择节点

  在XML文档中,根标记的子标记是很重要的类别,XSL应该能为这类XML标记设定显示的样式,即相匹配的模板。这些模板中的“标记匹配模式”(XML标记的路径信息)可以是子标记的名字或根标记的名字。XSL处理器会根据match属性提供元素名称,去XML文档中提取该节点的数据。

5.3.2  使用路径选择节点

  上一个小节中,我们直接通过了元素名称匹配了模板,实际上也可以通过详细的路径信息选择节点。即模板中的“标记匹配模式”(XML标记的路径信息)可以有子标记名称、根标记名称、斜杠(/)或双斜杠(//)共同组成。

5.3.3  使用匹配符选择节点

  对于不同的标记,路径写法也不完全相同,其路径信息中可以包含相应的匹配符。通过使用匹配符“*”可以建立匹配任何标记的模板,无论该标记是根标记的几级子标记。例如,“<xsl:template
match=”*”>”表示匹配任何元素,“<xsl:template
match=”员工列表/*/*”>”表示匹配【员工列表】元素节点的任意子节点的子节点。

5.3.4  使用元素属性选择节点

  通过使用“标记[@属性
]”或“标记[@属性=‘属性值’]”,可以建立匹配具有指定属性的标记的模板。起到一个筛选的作用,若只需要为某个带有属性的标记创建模板,该模板的标记匹配模式可以通过上面的形式指定。

5.3.5  使用附加条件选择节点

  可以使用“[]”来给出一个标记需满足的条件,即可以更精确的匹配某一个节点。例如<xsl:template
match=“//goods[price]”>模板的内容</xsl:template>。标记匹配模式后的路径信息表明该模板是名字为goods且具有子标记price的标记的匹配模板。使用“|”给出几个可以选择的标记,例如<xsl:template
match=“//单价|库存量|生产日期”></xsl:template>表明该模板是标记名字为“单价”,“库存量”和“生产日期”等标记的匹配模板,无论这些标记在根标记的哪一级子标记。

5.4  XSL控制指令

  XSL文件实质上是XML文档,有HTML和XSL标记组成,只不过这些标记能够被XSL处理识别。XSL标记对输出的数据进行筛选和判断,从而达到过滤数据的目的。

5.4.1  简单判断指令

  script表示是否使用脚本程序;language表示脚本程序使用的语言的种类;test属性是该标记最重要的属性,用来设置标记过滤的条件。只有当test设置的条件成立的时候,XSL处理器才会执行<xsl:if>标记下面的指令,当条件不满足的时候,不执行下面的指令。

5.4.2  多条件判断指令

  在<xsl:if>元素只有两种选择,而如何要有多种选择单靠一个<xsl:if>元素就不能胜任了,<xsl:choose>就是在多种条件中进行判断选择的。<xsl:choose>包含了一组<xsl:
when>元素,在test中属性中将规定各种条件,在测试时将从顶至底依次匹配直到找到满足的条件。如果所有的<xsl:when>
元素都不满足要求,则应用<xsl:otherwise>元素。

5.4.3  循环处理指令

  <xsl:for-each 
select=“标记匹配模式”>内容</xsl:for-each>标记主要用来获得指定XML文档中某个标记,并将定义的样式作用在该标记的上面。当XML文件中出现了两条以上名字相同的标记所定义的数据时,我们必须先用<xsl:for-each
select=
“”></xsl:for-each>指定同名标记后,才能通过<xsl:value-of
select=
“”><xsl:value-of>来提取各个同名的标记。该标记在XSL文件中可以多次的使用。

5.4.4  输出内容的排序

  <xsl:sort> 总是作为元素<xsl:apply-templates>
或元素<xsl:for-each>
的子元素,包括select、lang、data-type、order、case-order等几个可选属性。在XSLT中可以对XML源文档的元素进行重新排序,排序的语法就是xsl:sort。

5.5  XSL应用实例

  XML文件的所有表现信息多发放在了XSL样式表单文件当中。XSL文件全权负责XML源文件的表现形式。所以说如果一个XML源文件对应不同的样式表单文件它就会有不同的表现形式。有了XSL文件我们可以对文件表现型始终的大小,颜色,空白作特定的规定。如果将XML文件转换为HTML文件,XSL文件显示XML数据所使用的标记,通常是HTML标记。HTML标记作为布局和显示内容是一个最佳的选择,但作为样式修饰就远远不如CSS强大了。在XSL样式表单中加入CSS代码,是显示XML数据另外一种方法。

 

图片 1图片 2welcome.xsl
<?xml version=”1.0″  encoding=”GB2312″?>
<xsl:stylesheet version=”1.0″ xmlns:xsl=”;
<xsl:template match=”/”>
   <html>
      <xsl:apply-templates/>
   </html>
</xsl:template>
<xsl:template match=”欢迎词”>
<head><title>
   <xsl:value-of select=”标题”/>
</title></head>
<body>
<font color=’red’><xsl:value-of select=”内容”/></font>
</body>
</xsl:template>
</xsl:stylesheet>

图片 3图片 4welcome
<?xml version=”1.0″ encoding=”GB2312″?>
<?xml-stylesheet type=”text/xsl” href=”welcome.xsl”?>
<欢迎词>
<标题>欢迎新同学</标题>
<内容>欢迎来自五湖四海的同学,来我校学习</内容>
</欢迎词>

图片 5图片 6employees
<?xml version=”1.0″ encoding=”GB2312″?>
<?xml-stylesheet type=”text/xsl” href=”employees5.xsl”?>
<员工列表>
    <员工 员工编号=”E-200802100001″>
        <姓名>张怀法</姓名>
        <年龄>30</年龄>
        <月薪 币种=”人民币”>
            1200.00
        </月薪>
    </员工>
    <员工 员工编号=”E-200802100006″>
        <姓名>马东顺</姓名>
        <年龄>28</年龄>
        <月薪 币种=”美元”>
            900.00
        </月薪>
    </员工>
    <员工 员工编号=”E-200703220001″>
        <姓名>王玉强</姓名>
        <年龄>32</年龄>
        <月薪 币种=”人民币”>
            2500.00
        </月薪>
    </员工>
</员工列表> 

图片 7图片 8employees.xsl
<?xml version=”1.0″ encoding=”GB2312″?>
<xsl:stylesheet version=”1.0″ xmlns:xsl=”;

    <xsl:template match=”/”>
        <xsl:apply-templates/>
    </xsl:template>
    
    <xsl:template match=”员工列表”>
        <xsl:apply-templates/>
    </xsl:template>
    
    <xsl:template match=”员工”>
       <font color=’red’> <xsl:apply-templates select=”姓名”/> </font>
    </xsl:template>
    
</xsl:stylesheet>

图片 9图片 10employees1.xsl
<?xml version=”1.0″ encoding=”GB2312″?>
<xsl:stylesheet version=”1.0″ xmlns:xsl=”;

    <xsl:template match=”/”>
       <html>
          <head><title>直接使用节点名称</title></head>
          <xsl:apply-templates/>
      </html>
    </xsl:template>
    
    <xsl:template match=”员工列表”>
       <body>
          <table border=”1″ width=”80%” align=”center”>
           <th>姓名</th><th>年龄</th><th>月薪</th>
              <xsl:apply-templates/>
           </table>
        </body>
    </xsl:template>
    
    <xsl:template match=”员工”>
       <tr>
           <td><xsl:value-of select=”姓名”/></td>
           <td><xsl:value-of select=”年龄”/></td>
           <td><xsl:value-of select=”月薪”/></td>
       </tr>
    </xsl:template>
    
</xsl:stylesheet>

图片 11图片 12employees2.xsl
<?xml version=”1.0″ encoding=”GB2312″?>
<xsl:stylesheet version=”1.0″ xmlns:xsl=”;

    <xsl:template match=”/”>
       <html>
          <head><title>使用路径选择节点</title></head>
          <xsl:apply-templates/>
      </html>
    </xsl:template>
    
    <xsl:template match=”员工列表”>
       <body>
              <xsl:apply-templates />
        </body>
    </xsl:template>

  <xsl:template match=”员工”>
      <p>
       <xsl:apply-templates select=”姓名”/>
       <xsl:apply-templates select=”年龄”/>
      </p>
 </xsl:template>
  <xsl:template match=”员工列表/员工/姓名”>
          <font color=”red” size=”7″><xsl:value-of select=”.”/></font>
  </xsl:template>
  <xsl:template match=”//年龄”>
          <font color=”blue” size=”5″><xsl:value-of select=”.”/></font>
  </xsl:template>
   
</xsl:stylesheet>

图片 13图片 14employees3.xsl
<?xml version=”1.0″ encoding=”GB2312″?>
<xsl:stylesheet version=”1.0″ xmlns:xsl=”;

    <xsl:template match=”/”>
       <html>
          <head><title>使用路径选择节点</title></head>
          <xsl:apply-templates/>
      </html>
    </xsl:template>
    
    <xsl:template match=”员工列表”>
       <body>
              <xsl:apply-templates />
        </body>
    </xsl:template>

  <xsl:template match=”员工”>
      <p>
       <xsl:apply-templates select=”姓名”/>
       <xsl:apply-templates select=”年龄”/>
      </p>
 </xsl:template>
  <xsl:template match=”员工列表/*/姓名”>
          <font color=”red” size=”7″><xsl:value-of select=”.”/></font>
  </xsl:template>
  <xsl:template match=”员工列表/*/*”>
          <font color=”blue” size=”5″><xsl:value-of select=”.”/></font>
  </xsl:template>
</xsl:stylesheet>

图片 15图片 16employees4.xsl
<?xml version=”1.0″ encoding=”GB2312″?>
<xsl:stylesheet version=”1.0″ xmlns:xsl=”;

    <xsl:template match=”/”>
       <html>
          <head><title>使用路径选择节点</title></head>
          <xsl:apply-templates/>
      </html>
    </xsl:template>
    
    <xsl:template match=”员工列表”>
       <body>
              <xsl:apply-templates />
        </body>
    </xsl:template>

  <xsl:template match=”员工”>
      <p>
       <xsl:apply-templates select=”姓名”/>
       <xsl:apply-templates select=”月薪”/>
      </p>
 </xsl:template>
  <xsl:template match=”员工列表/员工/姓名”>
          <font color=”red” size=”7″><xsl:value-of select=”.”/></font>
  </xsl:template>
  <xsl:template match=”月薪[@币种=’美元’]”>
          <font color=”blue” size=”5″><xsl:value-of select=”.”/>(美元)</font>
  </xsl:template>
   
</xsl:stylesheet>

图片 17图片 18employees5.xsl
<?xml version=”1.0″ encoding=”GB2312″?>
<xsl:stylesheet version=”1.0″ xmlns:xsl=”;

    <xsl:template match=”/”>
       <html>
          <head><title>使用路径选择节点</title></head>
          <xsl:apply-templates/>
      </html>
    </xsl:template>
    
    <xsl:template match=”员工列表”>
       <body>
              <xsl:apply-templates />
        </body>
    </xsl:template>

  <xsl:template match=”员工”>
      <p>
       <xsl:apply-templates select=”姓名”/>
       <xsl:apply-templates select=”年龄”/>
       <xsl:apply-templates select=”月薪”/>
      </p>
 </xsl:template>
  <xsl:template match=”//姓名|年龄”>
          <font color=”red” size=”7″><xsl:value-of select=”.”/></font>
  </xsl:template>
  <xsl:template match=”员工[1]”>
          <font color=”blue” size=”5″><xsl:value-of select=”.”/></font>
  </xsl:template>
</xsl:stylesheet>

图片 19图片 20example1
<?xml version=”1.0″ encoding=”GB2312″?>
<?xml-stylesheet type=”text/xsl” here=”Example1.xsl”?>
<俱乐部>
<会员>    
<姓名>韩军</姓名>
<年龄>30 </年龄>
<性别>男 </性别>
<描述>喜欢旅游和听音乐</描述>
</会员>
<会员>
<姓名>马红波</姓名>
<年龄>35 </年龄>
<性别>男 </性别>
<描述>喜欢足球和读书</描述>
</会员>
<会员>
<姓名>孙静</姓名>
<年龄>20 </年龄>
<性别>女 </性别>
<描述>喜欢演讲和跑步</描述>
</会员>
</俱乐部>

图片 21图片 22example2
<?xml version=”1.0″ encoding=”GB2312″?>
<?xml:stylesheet href=”Example2.xsl” type=”text/xsl” ?>
<购物清单>
    <商品>
      <商品名称>电风扇</商品名称> 
      <商品价格 涨价=”1″>10</商品价格>
      <商品数量>3</商品数量>
    </商品>
    <商品>
      <商品名称>香皂</商品名称>
      <商品价格 降价=”0.5″>4.5</商品价格>
      <商品数量>2</商品数量>
    </商品>
    <商品>
      <商品名称>绿茶</商品名称>
      <商品价格 涨价=”0.5″>2.5</商品价格>
      <商品数量>10</商品数量>
    </商品>
 </购物清单>

图片 23图片 24example2.xsl
<?xml version=”1.0″ encoding=”GB2312″?>
<xsl:stylesheet version=”1.0″ xmlns:xsl=”;
<xsl:template match=”/”>
    <html>
       <head><title>xsl元素</title></head>
       <body>
          <xsl:apply-templates  select=”购物清单/商品/*”/>
        </body>
   </html>
</xsl:template>

<xsl:template match=”*”>
     <xsl:apply-templates  select=”购物清单/商品/商品名称”/>
     <xsl:apply-templates  select=”购物清单/商品/商品价格”/>
</xsl:template>

<xsl:template match=”购物清单/商品/商品名称”>
          <h1><font color=”red”>
                <xsl:value-of select=”.”/>
          </font></h1>
</xsl:template>

<xsl:template match=”购物清单/商品/商品价格”>
          <xsl:if test=”商品价格>2.5″>
            <font color=”blue”>
               <xsl:value-of select=”.”/>
            </font><sub>涨价</sub>
          </xsl:if>

</xsl:template>

</xsl:stylesheet>

图片 25图片 26example2_0.xsl
<?xml version=”1.0″ encoding=”GB2312″?>
<xsl:stylesheet xmlns:xsl=”;
<xsl:template match=”/”>
    <html>
       <head><title>xsl元素</title></head>
       <body>
          <xsl:apply-templates  select=”购物清单/商品/*”/>
        </body>
   </html>
</xsl:template>

<xsl:template match=”*”>
     <xsl:apply-templates  select=”购物清单/商品/商品名称”/>
     <xsl:apply-templates  select=”购物清单/商品/商品价格”/>
</xsl:template>

<xsl:template match=”购物清单/商品/商品名称”>
          <h1><font color=”red”>
                <xsl:value-of select=”.”/>
          </font></h1>
</xsl:template>

<xsl:template match=”购物清单/商品/商品价格”>
          <xsl:if test=”.[@涨价=0.5]”>
            <font color=”blue”>
               <xsl:value-of select=”.”/>
            </font><sub>涨价</sub>
          </xsl:if>
          <xsl:if test=”.[@降价]”>
             <font color=”green”>
               <xsl:value-of select=”.”/>
            </font><sub>降价</sub>
         </xsl:if>
</xsl:template>

</xsl:stylesheet>

图片 27图片 28example3
<?xml version=”1.0″ encoding=”GB2312″?>
<?xml:stylesheet href=”Example3.xsl” type=”text/xsl” ?>
<学生名单>
    <学生>
      <学生姓名 班级=”一班”>李张利</学生姓名>
      <学生成绩 数学=”95″ 语文=”82″>175</学生成绩>
    </学生>
    <学生>
      <学生姓名 班级=”二班”>于辉</学生姓名>
      <学生成绩 数学=”65″ 语文=”78″>145</学生成绩>
    </学生>
    <学生>
      <学生姓名 班级=”一班”>张浩</学生姓名>
      <学生成绩 数学=”79″ 语文=”83″>162</学生成绩>
    </学生>
 </学生名单>

图片 29图片 30example3.xsl
<?xml version=”1.0″ encoding=”gb2312″?>
<xsl:stylesheet xmlns:xsl=”;
<xsl:template match=”/”>
    <html>
       <head><title>XSL控制指令</title></head>
       <body>
           <ul type=”1″>
            <xsl:apply-templates  select=”学生名单/学生/*”/>
           </ul>
        </body>
   </html>
</xsl:template>
<xsl:template match=”学生/*”>

        <xsl:choose>
             <xsl:when test=”.[@数学$lt$80 $and$ @语文 $lt$ 80]”>
               <font style=”color:blue;font-size:20″><xsl:value-of select=”.”/>分</font>
              </xsl:when>
          
             <xsl:when test=”.[@数学 $lt$ 80 $and$ @语文 $gt$80]”>
               <font style=”color:aqua;font-size:15″><xsl:value-of select=”.”/>分</font>
             </xsl:when>
             <xsl:when test=”.[@数学 $gt$ 80 $and$ @语文 $gt$80]”>
               <font style=”color:red;font-size:30″><xsl:value-of select=”.”/>分</font>
              </xsl:when>
             <xsl:otherwise>
                   <li><xsl:value-of select=”.”/></li>
        </xsl:otherwise>
     </xsl:choose>

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

图片 31图片 32example4
 <?xml version=”1.0″ encoding=”GB2312″ standalone = “no”?>
<?xml-stylesheet type=”text/xsl” href=”Example4.xsl”?> 
<roster>
  学生花名册
  <student>
    <name>李华</name>
    <origin>河北</origin>
    <age>15</age>
    <telephone>62875555</telephone>
  </student>
  <student>
    <name>张三</name>
    <origin>北京</origin>
    <age>14</age>
    <telephone>82873425</telephone>
  </student>
</roster>

图片 33图片 34example4.xsl
<?xml version=”1.0″ encoding=”gb2312″ ?> 
<xsl:stylesheet version=”1.0″ xmlns:xsl=”” > 
<xsl:template match=”/”> 
<xsl:apply-templates/> 
</xsl:template> 
<xsl:template match=”/”> 
<HTML> 
  <HEAD> 
    <TITLE>学生花名册</TITLE> 
    <STYLE> .title{font-size:15pt; font-weight:bold; color:blue } .name{color:red}
    </STYLE>
  </HEAD> 
  <BODY> 
    <P class=”title” >学生花名册</P> 
    <xsl:apply-templates select=”roster”/> 
 </BODY> 
  </HTML> 
</xsl:template> 
<xsl:template match=”roster”> 
<TABLE BORDER=”1″> 
    <THEAD> 
      <TD> <B>姓名</B> </TD>
      <TD> <B>籍贯</B> </TD> 
      <TD> <B>年龄</B> </TD> 
      <TD> <B>电话</B> </TD> 
    </THEAD>
    <xsl:for-each select=”student”> 
    <TR> 
      <TD><B><xsl:value-of select=”name”/></B></TD> 
      <TD><xsl:value-of select=”origin”/></TD> 
      <TD><xsl:value-of select=”age”/></TD> 
      <TD><xsl:value-of select = “telephone”/></TD> 
    </TR>
    </xsl:for-each>
  </TABLE> 
</xsl:template> 
</xsl:stylesheet>

图片 35图片 36example5
<?xml   version= “1.0” encoding=”GB2312″?>  
  <?xml-stylesheet   type=”text/xsl”   href=”Example5.xsl”?>  
  <雇员列表>  
      <雇员>  
          <姓名>  
              <名字>海松</名字>  
              <姓>刘</姓>  
          </姓名>  
      </雇员>  
      <雇员>  
          <姓名>  
              <名字>一</名字>  
              <姓>丁</姓>  
          </姓名>  
      </雇员>  
      <雇员>  
          <姓名>  
              <名字>峰</名字>  
              <姓>王</姓>  
          </姓名>  
      </雇员>  
      <雇员>  
          <姓名>  
              <名字>辉</名字>  
              <姓>于</姓>  
          </姓名>  
      </雇员>  
      <雇员>  
          <姓名>  
              <名字>张力</名字>  
              <姓>李</姓>  
          </姓名>  
      </雇员>  
      <雇员>  
          <姓名>  
              <名字>天波</名字>  
              <姓>赵</姓>  
          </姓名>  
      </雇员>  
  </雇员列表>   

图片 37图片 38example5.xsl
<?xml   version=’1.0′ encoding=”GB2312″?>  
<xsl:stylesheet   xmlns:xsl=””   version=”1.0″>
   <xsl:template match=”/”> 
    <xsl:apply-templates/> 
  </xsl:template> 
  <xsl:template   match=”雇员列表”>  
      <ul>  
          <xsl:apply-templates   select=”雇员”>  
              <xsl:sort   select=”姓名/姓”/>  
              <xsl:sort   select=”姓名/名字”/>  
          </xsl:apply-templates>  
      </ul>  
  </xsl:template>  
   
  <xsl:template   match=”雇员”>  
      <li>  
          <xsl:value-of   select=”姓名/名字”/>  
          <xsl:value-of   select=”姓名/姓”/>  
      </li>  
  </xsl:template>  
   
  </xsl:stylesheet>   

图片 39图片 40example6
<?xml version=”1.0″ encoding=”GB2312″?>
<?xml-stylesheet type=”text/xsl” href=”Example6.xsl”?>
<商品价格表>
    <商品价格表-序号>0001</商品价格表-序号>

    <商品>
       <名称>水杯</名称>
       <数量>7</数量>
       <单价>20 元</单价>
    </商品>

    <商品>
       <名称>稿纸</名称>
       <数量>2</数量>
       <单价>5 元</单价>
    </商品>

    <商品>
       <名称>毛笔</名称>
       <数量>20</数量>
     <单价>15 元</单价>
    </商品>

</商品价格表>

图片 41图片 42example6.xsl
<?xml version=”1.0″ encoding=”GB2312″?>
<xsl:stylesheet xmlns:xsl=”” version=”1.0″>
<xsl:template match=”/”> 
<xsl:apply-templates/> 
</xsl:template> 
<xsl:template match=”商品价格表”>
<HTML>
<HEAD>
<style>
.ya{background-color:aqua;font-size:20;}
#mn{background-color:orange;font-size:22;font-weight:bold;}
</style>
</HEAD>
<BODY>
<h1 align=”center”>同时使用XSL与CSS</h1>
<table border=”1″ width=”60%” id=”mn” align=”center”>
<th>商品名称</th><th>商品数量</th><th>商品价格</th>
<p class=”ya”>此商品价格表序号是<xsl:apply-templates select=”商品价格表-序号”/></p>
<xsl:apply-templates select=”商品”/>
</table>
</BODY>
</HTML>
</xsl:template>
<xsl:template match=”商品”>
<tr>
<td><xsl:value-of select=”名称”/></td>

<xsl:if test=”数量>5″>
<td bgcolor=”gray”><xsl:value-of select=”数量”/></td>
</xsl:if>

<xsl:if test=”5>数量”>
<td bgcolor=”aqua”><xsl:value-of select=”数量”/></td>
</xsl:if>

<td><xsl:value-of select=”单价”/></td>
</tr>
</xsl:template>
</xsl:stylesheet>

图片 43图片 44example7
<?xml version=”1.0″ encoding=”gb2312″?>
<?xml-stylesheet type=”text/xsl” href=”Example7.xsl”?>
<火车票表>
<车票>
<班次>T99</班次>
<始发时间>11:30</始发时间>
</车票>
<车票>
<班次>S234</班次>
<始发时间>13:04</始发时间>
</车票>
</火车票表>

图片 45图片 46example7.xsl
<?xml version=”1.0″ encoding=”gb2312″ ?> 
<xsl:stylesheet xmlns:xsl=”;
<xsl:template match=”/”> 
<xsl:apply-templates/> 
</xsl:template> 
<xsl:template match=”/”> 
<HTML> 
  <BODY> 
    <P align=”center”>火车列表</P> 
    <xsl:apply-templates select=”火车票表”/> 
 </BODY> 
  </HTML> 
</xsl:template> 
<xsl:template match=”火车票表” > 
<TABLE BORDER=”1″ width=”50%” align=”center”> 
    <THEAD> 
      <TD> <B><xsl:node-name select=”车票/班次”/></B> </TD>
      <TD> <B><xsl:node-name select=”车票/始发时间”/></B> </TD> 
    </THEAD>
    <xsl:for-each select=”车票”> 
    <TR> 
      <TD><B><xsl:value-of select=”班次”/></B></TD> 
      <TD><xsl:value-of select=”始发时间”/></TD> 
    </TR>
    </xsl:for-each>
  </TABLE> 
</xsl:template> 
</xsl:stylesheet>

图片 47图片 48example8.xsl
<?xml version=”1.0″ encoding=”gb2312″?>
<xsl:stylesheet xmlns:xsl=”” version=”1.0″>
<xsl:template match=”/”>
    <html><body>
          <xsl:element name=”A”>
                <xsl:attribute name=”href”>
                     <xsl:value-of select=”图书/网址”/>          
                </xsl:attribute>
                <xsl:value-of select=”图书/名称”/>
          </xsl:element>
          <xsl:element name=”IMG”>
               <xsl:attribute name=”src”>
                     <xsl:value-of select=”图书/图片”/> 
               </xsl:attribute>
          </xsl:element>
       </body>
   </html>
</xsl:template>
</xsl:stylesheet>

图片 49图片 50example8
<?xml version=”1.0″ encoding=”GB2312″?>
<?xml:stylesheet href=”Example8.xsl” type=”text/xsl” ?>
<图书>
     <名称>XML实践教程</名称>
     <图片>6.jpg</图片>
     <网址>Example7.xml</网址>
</图书>

图片 51图片 52example9
<?xml version=”1.0″ encoding=”GB2312″?>
<?xml:stylesheet href=”Example9_3.xsl” type=”text/xsl” ?>
<电器列表>
  <电器>
      <名称>TCL彩电</名称>
      <价格>1200</价格>
  </电器>
  <电器>
      <名称>海尔洗衣机</名称>
      <价格>2300</价格>
  </电器>
  <电器>
      <名称>格力空调</名称>
      <价格>6700</价格>
  </电器>
</电器列表>

图片 53图片 54example9.xsl
<?xml version=”1.0″ encoding=”gb2312″?>
<xsl:stylesheet xmlns:xsl=”” version=”1.0″>
<xsl:template match=”/”>
    <html><body>
        <form>
           <h3>购买电器核对</h3>
           <xsl:for-each select=”电器列表/电器”>
                <xsl:value-of select=”名称”/>   价格<xsl:value-of select=”价格”/>元<input type=”checkbox”/><br/>
            </xsl:for-each>   
            <input type=”submit” value=”确认购买”/>
         </form>
    </body></html>
</xsl:template>
</xsl:stylesheet>

图片 55图片 56example9_1.xsl
<?xml version=”1.0″ encoding=”gb2312″?>
<xsl:stylesheet xmlns:xsl=”” version=”1.0″>
<xsl:template match=”/”>
    <html><body>
      <h3 align=”center”>购买电器核对</h3>
       <TABLE BORDER=”1″ width=”50%” align=”center”> 
        <xsl:apply-templates/>
       </TABLE> 
    </body></html>
</xsl:template>
<xsl:template match=”电器”>
            <TR> 
              <TD><xsl:value-of select=”名称”/></TD> 
              <TD><xsl:value-of select=”价格”/>元</TD> 
               <td> <xsl:element name=”A”>
                  <xsl:attribute name=”href”>
                   </xsl:attribute>
                   放弃
               </xsl:element></td>
            </TR>
</xsl:template>
</xsl:stylesheet>

图片 57图片 58example9_2.xsl
<?xml version=”1.0″ encoding=”gb2312″?>
<xsl:stylesheet xmlns:xsl=”” version=”1.0″>
<xsl:template match=”/”>
    <html><body>
      <h3 align=”center”>电器价格参照表(红色字体为优惠价)</h3>
       <TABLE BORDER=”1″ width=”50%” align=”center”> 
        <xsl:apply-templates/>
       </TABLE> 
    </body></html>
</xsl:template>
<xsl:template match=”电器”>
       <TR> 
          <TD><xsl:value-of select=”名称”/></TD> 
          <xsl:if test=”价格>2000″>
              <TD style=”font-size:20;color:red”><xsl:value-of select=”价格”/></TD> 
          </xsl:if>
          <xsl:if test=”2000>价格”>
              <TD style=”font-size:10;color:blue”><xsl:value-of select=”价格”/></TD> 
          </xsl:if>
            </TR>
</xsl:template>
</xsl:stylesheet>

图片 59图片 60example9_3.xsl
<?xml version=”1.0″ encoding=”gb2312″?>
<xsl:stylesheet xmlns:xsl=”” version=”1.0″>
<xsl:template match=”/”>
    <html>
         <head>
           <style type=”text/css”>
                    .v1{color:gray;font-size:30}
                    .v2{color:blue;font-size:15}
            </style>
          </head>
    <body>
      <p style=”text-align:left;font-size:50″>价格表</p>
          <ul>  <xsl:apply-templates/> </ul> 
    </body></html>
</xsl:template>
<xsl:template match=”电器”>
         <li><div class=”v1″><xsl:value-of select=”名称”/></div><div class=”v2″><xsl:value-of select=”价格”/>元</div></li>
</xsl:template>
</xsl:stylesheet>

发表评论

电子邮件地址不会被公开。 必填项已用*标注