`

XSLT教程

    博客分类:
  • XML
阅读更多

XML文档树

1) XML可以转化文档树

2) XSLTXML的转化过程

内建模板规则

调用<xsl:apply-templates>处理根节点的儿子。处理时,使用调用时相同的模式

元素

调用<xsl:apply-templates>处理该节点的儿子。处理时,使用调用时相同的模式

属性

拷贝属性值到结果树,结果作为文本而不是属性节点

文本

拷贝文本到结果树

注释

不做任何事

处理指令

不做任何事

命名空间

不做任何事

XSLT 1.0支持的五种数据类型

numberbooleanstringnode-settree

相互之间的转化

     

boolean

number

string

node-set

tree

boolean

/

false -> 0

true -> 1

false -> ‘false’

true -> ‘true’

不允许

不允许

number

0 -> false

0-> true

/

转化为十进制数

不允许

不允许

string

null-> false

其他 -> true

解析为十进制

/

不允许

不允许

node-set

empty -> false

其他 -> true

通过string转化

文档顺序中第一个节点的字符串值

/

不允许

tree

通过string转化

通过string转化

连接所有的文本节点

不允许

/

说明:

Tree很少见,只有在xsl:variable中才出现。xslt2.0已经取消该类型。另外,转化为node-set,标准xslt1.0不提供,但是扩展接口通常都是提供的。比如微软提供了msxsl:node-set

XPath

基本概念

绝对路径的写法

上下文节点(context node

XPath中直接包含的,和当前节点等同。上下文节点可以通过“.”得到。

position()可以得到上下文节点的当前值。

last()可以得到上下文节点的大小

可以修改上下文节点的xslt标签

xsl:apply-templates xsl:for-each

xsl:for-each一个常用的特色就是修改context node

Axes

参见P282

Axes

Description

ancestor::

The ancestors of the context node.

The ancestors of the context node consist of the parent of the context node and the parent's parent and so on; thus the ancestor:: axis always includes the root node unless the context node is the root node.

ancestor-or-self::

The context node and its ancestors.

The ancestor-or-self:: axis always includes the root node.

attribute::

The attributes of the context node.

This axis will be empty unless the context node is an element.

child::

The children of the context node.

A child is any node immediately below the context node in the tree. However, neither attribute or namespace nodes are considered children of the context node.

descendant::

The descendants of the context node.

A descendant is a child or a child of a child and so on; thus the descendant:: axis never contains attribute or namespace nodes.

descendant-or-self::

The context node and its descendants.

following::

All nodes that are after the context node in the tree, excluding any descendants, attribute nodes, and namespace nodes.

following-sibling::

All the following siblings of the context node.

The following-sibling:: axis identifies just those children of a parent node who appear in the tree after the context node. This axis excludes all other children that appear before the context node.

If the context node is an attribute node or namespace node, the following-sibling:: axis is empty.

namespace::

The namespace nodes of the context node.

There is a namespace node for every namespace which is in scope for the context node.

This axis will be empty unless the context node is an element.

parent::

The parent of the context node, if there is one.

The parent is the node immediately above the context node in the tree.

preceding::

All nodes that are before the context node in the tree, excluding any ancestors, attribute nodes, and namespace nodes.

One way to think of the preceding axis is all nodes whose content occurs in their entirety before the start of the context node.

preceding-sibling::

All the preceding siblings of the context node.

The preceding-sibling:: axis identifies just those children of a parent node who appear in the tree before the context node. This axis excludes all other children that appear after the context node.

If the context node is an attribute node or namespace node, the preceding-sibling:: axis is empty.

self::

Just the context node itself.

几种简写方式

self::

.

attribute::

@

parent::

..

child::

 

/descendant-or-self::node()

//

Filter

[] 里面的值是boolean类型,如果不是(数值除外)就会发生强制类型转化成boolean

数值的特性

其他

NameTest *

Union |

XPath部分函数

Node-Set函数

count()local-name()name()position()last()

String函数

concat()contains()starts-with()string()string-length()substring ()substring-after()substring-before()translate()

    <xsl:variable name="UpCaseHttp" select="translate($ItemValue, 'htp', 'HTP')"/>

Boolean函数

boolean()false()not()true()

Number函数

ceiling()floor()number()round()sum()

XSLT标签

xsl:template xsl:call-template xsl:apply-templates xsl:param xsl:with-param

 <xsl:template name="JSButton">

    <xsl:param name="Name"/>

    <xsl:param name="JS"/>

    <img src="../images/empty.gif" width="5" height="1"/>

    <span class="clsButtonFace">

      <a onclick="javascript:{$JS};">

        <xsl:value-of select="$Name"/>

      </a>

    </span>

 </xsl:template>

 <xsl:template name="ea:SaveNoNewButton">

    <xsl:call-template name="JSButton">

      <xsl:with-param name="Name" select="' 保存'"/>

      <xsl:with-param name="JS" select="'verify(&quot;Save&quot;)'"/>

    </xsl:call-template>

 </xsl:template>

 <xsl:apply-templates select="Ebanswers/PAGE">

 <xsl:template match="PAGE">

 </xsl:template>

xsl:foreach

          <xsl:for-each select="$CodeTable">

            <option value="{CODE_VALUE}">

              <xsl:if test="CODE_VALUE = $AValue">

                <xsl:attribute name="selected"/>

              </xsl:if>

              <xsl:value-of select="CODE_NAME"/>

            </option>

          </xsl:for-each>

xsl:sort

<xsl:sort

 select = string-Expression

 lang = { nmtoken }

 data-type = { "text" | "number" | QName }

 order = { "ascending" | "descending" }

 case-order = { "upper-first" | "lower-first" }

 />

紧随xsl:apply-templatesxsl:for-each

    <xsl:apply-templates select="/Toolkit/tk:Table/tk:Field[tk:List]">

      <xsl:sort select="tk:List/@Order" data-type="number"/>

    </xsl:apply-templates>

xsl:variable

注意字符串变量

 <xsl:variable name="Test" select="'title'"/>

xsl:value-of xsl:text

<xsl:value-of

 select = Expression

 disable-output-escaping = "yes" | "no"

</xsl:value-of>

<xsl:text

 disable-output-escaping = "yes" | "no">

</xsl:text>

 <xsl:template name="ea:WhiteSpace">

    <xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text>

 </xsl:template>

xsl:element xsl:attribute xsl:attribute-set

XML File (item.xml)

<?xml version="1.0"?>

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

<root>

   <item>My Item</item>

</root>

XSLT File (element.xsl)

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

<xsl:template match="item">

   <xsl:element name="xsl:template">

      <xsl:attribute name="match">cost</xsl:attribute>

      <xsl:attribute name="xml:space">preserve</xsl:attribute>

      <xsl:apply-templates/>

   </xsl:element>

</xsl:template>

</xsl:stylesheet>

Output

This is the formatted output:

My Item

The following is the processor output, with line breaks added for clarity.

<?xml version="1.0"?>

<xsl:template match="cost"

      xml:space="preserve"

      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

My Item</xsl:template>

 <xsl:attribute-set name="ea:WrapAttrs">

    <xsl:attribute name="nowrap"/>

 </xsl:attribute-set>

 <!--不能为空的字段的显示名称的td的attribute-set-->

 <xsl:attribute-set name="ea:NonEmptyAttrs" use-attribute-sets="ea:WrapAttrs">

    <xsl:attribute name="align">right</xsl:attribute>

    <xsl:attribute name="bgcolor">#E2EBF6</xsl:attribute>

 </xsl:attribute-set>

xsl:if xsl:choose xsl:when xsl:otherwise

        <a href="{$HttpRef}">

          <xsl:if test="$Target != ''">

            <xsl:attribute name="target"><xsl:value-of select="$Target"/></xsl:attribute>

          </xsl:if>

          <xsl:value-of select="$ItemValue"/>

        </a>

      <xsl:choose>

        <xsl:when test="$BigHrefType='HREF'">

          <a href="{$HrefAddress}">

            <xsl:value-of select="$Value"/>

          </a>

        </xsl:when>

        <xsl:when test="$BigHrefType='EMAIL'">

          <a href="mailto:{$Value}">

            <xsl:value-of select="$Value"/>

          </a>

        </xsl:when>

        <xsl:otherwise>

          <xsl:call-template name="ea:ProcessText">

            <xsl:with-param name="Text" select="$Value"/>

          </xsl:call-template>

        </xsl:otherwise>

      </xsl:choose>

xsl:import xsl:include

 <xsl:import href="PublicUtil.xslt"/>

xsl:copy-of xsl:output

 <xsl:output method="html" indent="no"/>

 <xsl:variable name="ea:NoRecord">

    <tr>

      <td colspan="20" class="pad5">没有内容</td>

    </tr>

 </xsl:variable>

 <xsl:copy-of select="$ea:NoRecord"/>

XSLT函数

current()

通常情况下,和“.”返回的值相同。只有在filter情况下,才不同。

<xsl:apply-templates select="//glossary/item[@name=current()/@ref]"/

document()

 <xsl:variable name="ea:FieldList" select="document('')/xsl:stylesheet/ea:FieldList"/>

format-number()

format-number(53.51, "#.0000") // "53.5100"

其他

递归:

 <xsl:template name="ea:ProcessText">

    <xsl:param name="Text"/>

    <xsl:choose>

      <xsl:when test="contains($Text,' ')">

        <xsl:value-of select="substring-before($Text,' ')"/>

        <br/>

        <xsl:call-template name="ea:ProcessText">

          <xsl:with-param name="Text" select="substring-after($Text,' ')"/>

        </xsl:call-template>

      </xsl:when>

      <xsl:otherwise>

        <p style="word-break:break-all">

          <xsl:value-of select="$Text"/>

        </p>

      </xsl:otherwise>

    </xsl:choose>

 </xsl:template>

 <xsl:template name="ShowRow">

    <xsl:param name="CurIndex" select="0"/>

    <xsl:param name="Data"/>

    <xsl:param name="CurRow"/>

    <<

分享到:
评论

相关推荐

    XSLT 教程

    XSL 指扩展样式表语言(EXtensible Stylesheet Language)。 万维网联盟开始发展 XSL 的起因是由于对基于 XML 的样式表语言的需求。...在此教程中,你将学习如何使用 XSLT 将 XML 文档转换为其他文档,比如 XHTML。

    W3School的XSLT教程

    W3School的XSLT教程为学习者提供了一个全面且易于理解的平台,尤其适合XML和Web开发的初学者。在这个教程中,你将了解到XSLT的基本概念、语法以及如何使用它来实现XML数据的华丽变身。 1. **XSLT基础** - XSLT基于...

    TutorialsPoint XSLT 教程.epub

    TutorialsPoint XSLT 教程.epub

    xslt 扩展PDF教程

    标题:“XSLT扩展PDF教程” 描述:本教程旨在深入探讨XSLT(Extensible Stylesheet Language Transformations)的扩展功能,尤其是通过EXSLT(EXtensions to XSLT)来增强XSLT的处理能力,从而实现更复杂的转换任务...

    XSLT经典教程.doc

    XSLT经典教程 ...在本教程中,我们将为您提供详细的XSLT教程,包括XSLT的基本概念、XSLT元素、XSLT函数、XSLT模板等。同时,我们还将为您提供实践的例子和案例,帮助您更好地理解和掌握XSLT语言。

    XSLT手册(CHM版)目前最详细的内附教程实例

    XSLT教程部分可能涵盖了以下关键知识点: 1. **XSLT基础**:介绍XSLT的基本概念,包括XSLT文档结构,如模板规则、模式匹配、选择器和路径表达式。 2. **模板和模式匹配**:解释如何通过模板定义转换规则,以及如何...

    XSLT参考手册(根据w3schools的XSLT教程翻译改编而成)

    ### XSLT 元素详解 #### &lt;xsl:apply-imports&gt; 元素 **定义与用法:** `&lt;xsl:apply-imports&gt;` 元素在 XSLT 中用于应用之前通过 `&lt;xsl:import&gt;` 命令导入的样式表中的模板规则。当 XSLT 处理器遇到 `...

    XSLT简单教程- XSLT的实例

    ### XSLT简单教程——XSLT的实例详解 #### 一、XSLT简介与工作原理 XSLT(Extensible Stylesheet Language Transformations)是一种用于转换XML文档的语言。它允许开发人员按照预定义的规则对XML文档进行转换,...

    Code generation using XSLT.pdf

    为了帮助读者更好地理解和掌握所学内容,教程最后提供了一系列资源链接,包括但不限于XSLT教程、Ant教程及相关开源项目的网址等。 #### 结语 对于已经熟悉XML、XSLT及Java语言的开发者来说,学习如何使用XSLT进行...

    XSLT简便教程,XSLT简便教程

    ### XSLT简便教程 #### XSLT简介与核心概念 XSLT(Extensible Stylesheet Language Transformations)是一种用于转换XML文档的标准语言。通过XSLT,开发人员能够将一个XML文档转换成另一种格式的文档,如HTML、PDF...

    XSLT学习资料代码资料上传

    - **在线教程**:有许多网站提供免费的XSLT教程,适合初学者入门。 - **书籍**:市面上有很多关于XSLT的专业书籍,涵盖从基础到高级的所有主题。 - **社区论坛**:参与XSLT相关的在线社区,可以获取最新的技术和实践...

    XSLT指南

    - XSLT教程:在线教程帮助初学者快速上手。 - 实例代码:实践是学习的最佳途径,尝试编写和运行XSLT转换。 通过深入理解XSLT的原理和实践,开发者可以充分利用XML的灵活性,实现复杂的文档转换和数据处理任务。这本...

    XSLT的标准语言参考手册

    在线平台如"脚本之家(jb51.net)"提供了丰富的XSLT教程和参考手册,帮助开发者深入理解和掌握XSLT。 总结,XSLT是一种强大的XML处理工具,通过理解其基本元素、函数以及工作原理,开发者可以有效地对XML数据进行...

    XSLT_经典教程.doc

    ### XSLT经典教程知识点概览 #### 一、XPath简介 **XPath** 是一门用于在 **XML** 文档中查找信息的语言。它提供了一种简单有效的方法来定位和提取 **XML** 数据中的特定部分。这门语言的重要性在于它是许多高级 **...

    xslt经典教程—网页设计师必备

    **XSLT经典教程——网页设计师的必备指南** XSLT,全称为“Extensible Stylesheet Language Transformations”,是一种强大的语言,用于转换XML(可扩展标记语言)文档。它是W3C(万维网联盟)制定的标准,允许...

    XSLT入门教程

    在《XSLT入门教程》中,我们首先会接触到**XSLT的概念**。第一章“XSLT的概念”会介绍XSLT的基本原理,包括它的主要作用——数据转换,以及与XPath的关系。XPath是XML路径语言,用于在XML文档中查找信息,它是XSLT中...

Global site tag (gtag.js) - Google Analytics