现在的位置: 首页 > 综合 > 正文

XML Learning – XSLT – Wisdom Guo

2013年08月17日 ⁄ 综合 ⁄ 共 3221字 ⁄ 字号 评论关闭
 

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

抱歉!评论已关闭.