XML Learning - XSLT - Wisdom Guo

 

XML Learning - XSLT

Wisdom Guo

 


Overview

XSL - 不仅仅是样式表语言

  • XSL 包括三部分:
  • XSLT
    • 一种用于转换 XML 文档的语言。
    • XSLT 是一种用于将 XML 文档转换为 XHTML 文档或其他 XML 文档的语言。
  • XPath
    • 一种用于在 XML 文档中导航的语言。
    • XPath 是一种用于在 XML 文档中进行导航的语言。
  • XSL-FO
    • 一种用于格式化 XML 文档的语言。

 

什么是 XSLT

  • XSLT XSL 转换(XSL Transformations)。
  • XSLT XSL 中最重要的部分。
  • XSLT 可将一种 XML 文档转换为另外一种 XML 文档。
  • XSLT 使用 XPath XML 文档中进行导航。
  • XPath 是一个 W3C 标准。

 

XSLT = XSL 转换

XSLT XSL 中最重要的部分。

 

XSLT 用于将一种 XML 文档转换为另外一种 XML 文档,或者可被浏览器识别的其他类型的文档,比如 HTML XHTML。通常,XSLT 是通过把每个 XML 元素转换为 (X)HTML 元素来完成这项工作的。

 

通过 XSLT,您可以向或者从输出文件添加或移除元素和属性。您也可重新排列元素,执行测试并决定隐藏或显示哪个元素,等等。

 

描述转化过程的一种通常的说法是,XSLT XML 源树转换为 XML 结果树

创建XSLT

<?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>

 

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

 

如何在源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>

 

XSLT 元素

<xsl:template> 元素

XSL 样式表由一个或多套被称为模板(template)的规则组成。

每个模板含有当某个指定的节点被匹配时所应用的规则。

 

<xsl:template> 元素用于构建模板。

 

match 属性用于关联 XML 元素和模板。match 属性也可用来为整个文档定义模板。match 属性的值是 XPath 表达式(举例,match="/" 定义整个文档)。

<xsl:value-of>

<xsl:value-of> 元素用于提取某个选定节点的值。

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

      

<xsl:for-each> 元素

<xsl:for-each> 元素允许您在 XSLT 中进行循环。

<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>

结果过滤

通过在 <xsl:for-each> 元素中添加一个选择属性的判别式,我们也可以过滤由 XML 文件输出的结果。

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

合法的过滤运算符:

  • =  (等于)
  • != (不等于)
  • &lt; (小于)
  • &gt; (大于)

在何处放置排序信息

如需对结果进行排序,只要简单地在 XSL 文件中的 <xsl:for-each> 元素内部添加一个 <xsl:sort> 元素:

<xsl:if> 元素

用于放置针对 XML 文件内容的条件测试

<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:choose> 元素

用于结合 <xsl:when> <xsl:otherwise> 来表达多重条件测试。

语法

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

<xsl:apply-templates> 元素

可把一个模板应用于当前的元素或者当前元素的子节点<xsl:apply-templates> 元素

<xsl:apply-templates> 元素可把一个模板应用于当前的元素或者当前元素的子节点。

假如我们向 <xsl:apply-templates> 元素添加一个 select 属性,此元素就会仅仅处理与属性值匹配的子元素。我们可以使用 select 属性来规定子节点被处理的顺序。

XSLT 程序控制转换

客户端

JavaScript load xml xls 来进行控制转换。 需要浏览器支持xml解析

服务器端

.net 下进行load xml xls 来进行控制转换。客户端不需要xml解析

Note不需要引用在 xml文档中,这样一个xml文档就可以有多个xsl

XSLT 元素表

元素

描述

IE

N

apply-imports

从一个导入的样式表应用模板规则

6.0

 

apply-templates

对当前元素或当前元素的子节点应用某个模板规则

5.0

6.0

attribute

添加一个属性

5.0

6.0

attribute-set

定义一套指定的属性

6.0

6.0

call-template

调用一个指定的模板

6.0

6.0

choose

<when>以及<otherwise>协同使用来表达多重条件测试

5.0

6.0

comment

在结果树中创建一个注释节点

5.0

6.0

copy

创建当前节点的一个备份(无子节点及属性)

5.0

6.0

copy-of

创建当前节点的一个备份(带有子节点及属性)

6.0

6.0

decimal-format

定义把数字转换为字符串时被使用的字符和符号,使用format-number()函数。

6.0

 

element

在输出文档中创建一个元素节点t

5.0

6.0

fallback

假如处理器不支持某个XSLT元素,规定一段备用代码来运行。

6.0

 

for-each

循环遍历某个指定的节点集中的每个节点t

5.0

6.0

if

包含一个模板,仅当某个指定的条件成立时应用此模板。

5.0

6.0

import

把一个样式表的内容导入另一个。注释:被导入的样式表的优先级低于所导入的样式表。

6.0

6.0

include

把一个样式表的内容包含到另一个样式表。注释:被包含的样式表的优先级与所包含的样式表相同。

6.0

6.0

key

声明一个指定的键,此键可通过key()函数用于样式表之中。

6.0

6.0

message

向输出写一条消息(被用于错误报告)

6.0

6.0

namespace-alias

把样式表中的命名空间替换为输出中不同的命名空间

6.0

 

number

测定当前节点的整数位置,并formats a number

6.0

6.0

otherwise

规定<choose>元素的默认动作

5.0

6.0

output

定义输出文档的格式

6.0

6.0

param

声明一个本地或全局参数

6.0

6.0

preserve-space

定义元素中的空白字符如何被保留

6.0

6.0

processing-instruction

向输出写一条处理指令

5.0

6.0

sort

对输出进行排序

6.0

6.0

strip-space

定义元素的空白字符应当被如何删除

6.0

6.0

stylesheet

定义一个样式表的根元素

5.0

6.0

template

当某个指定的节点被匹配时所应用的规则

5.0

6.0

text

向输出写字面的文本

5.0

6.0

transform

定义一个样式表的根元素

6.0

6.0

value-of

提取某个被选定节点的值

5.0

6.0

variable

声明一个本地或者全局的变量

6.0

6.0

when

规定<choose>元素的动作

5.0

6.0

with-param

规定需被传入某个模板的参数的值

6.0

6.0

 

Reference

[1] http://www.w3school.com.cn/xsl/index.asp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值