XML Learning - XSLT - Wisdom Guo

来源:互联网 发布:淘宝天猫国际是正品吗 编辑:程序博客网 时间:2024/04/29 07:42
 

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天b超检查有血块怎么办 吃完优思明月经没有血块怎么办 刨腹产妇42天还有恶露怎么办 打完孩子第五天同房了出血了怎么办 打完孩子同房了出了一点血怎么办 宫腔镜检查一个月同房流血多怎么办 宫颈活检后三天同房有出血怎么办 顺产侧切两个月之后同房感染怎么办 顺产40天还有暗红色的恶露怎么办 来姨妈了没带卫生棉条去游泳怎么办 母猪肚子里面的小猪下不出来怎么办 刚生小猪的母猪肚子胀怎么办 吃了两天中药肚子还疼怎么办 怀孕期间垫了脚够东西怎么办 月经期垫卫生巾有边红肿有疹怎么办 四十天拉今天恶露特别多怎么办 顺产侧切出院几天后伤口裂开怎么办 产后十几撕裂用卫生巾疼怎么办 婴儿绑肚脐的棉黏在肚脐上怎么办 割完双眼皮第五天了很痒怎么办 自体脂肪丰胸做完半年有团块怎么办 假体隆胸一个月了躺着睡很硬怎么办 假体隆胸半月俩胸大小不一样怎么办 假体隆胸拆线后还是起不来床怎么办 假体隆胸术后6天 天天胀痛怎么办 阴部大腿根长了个疙瘩有点痛怎么办 加盟费交了总部不做事怎么办 仓鼠从桌子摔下来后走路别扭怎么办 习惯了一个人天天找你聊天怎么办 来完月经外阴湿疹就严重怎么办 宝宝不肯喝开水尿黄黄的怎么办 做阴超做一半发现忘记换套了怎么办 穿裙子时拉链总往下掉怎么办 子宫内膜厚姨妈来的久怎么办 胸小胸罩往上跑肩带往两边掉怎么办