XML文档树
1) XML可以转化文档树
2) XSLT对XML的转化过程
内建模板规则
根
|
调用<xsl:apply-templates>处理根节点的儿子。处理时,使用调用时相同的模式
|
元素
|
调用<xsl:apply-templates>处理该节点的儿子。处理时,使用调用时相同的模式
|
属性
|
拷贝属性值到结果树,结果作为文本而不是属性节点
|
文本
|
拷贝文本到结果树
|
注释
|
不做任何事
|
处理指令
|
不做任何事
|
命名空间
|
不做任何事
|
XSLT 1.0支持的五种数据类型
number、boolean、string、node-set、tree
相互之间的转化
到
从
|
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("Save")'"/>
</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-templates或xsl: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">&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"/>
<<
分享到:
相关推荐
XSL 指扩展样式表语言(EXtensible Stylesheet Language)。 万维网联盟开始发展 XSL 的起因是由于对基于 XML 的样式表语言的需求。...在此教程中,你将学习如何使用 XSLT 将 XML 文档转换为其他文档,比如 XHTML。
XSLT 元素 XSLT在服务器上 XSLT在客户端
TutorialsPoint XSLT 教程.epub
xslt 扩展 exslt PDF教程
XSLT 一种用于转换 XML 文档的语言。 XPath 一种用于在 XML 文档中导航的语言。 XSL-FO 一种用于格式化 XML 文档的语言。
很好的XSLT的使用手册。里面介绍了所有XSLT的标签的使用。
这是一份简单明了的教程,而且还有例子可以参考,对于初学者来说是再好不过的东西了
XSLT 入门教程。XSLT 入门教程。XSLT 入门教程。XSLT 入门教程。XSLT 入门教程
XSLT经典教程.doc
xslt中英文对照教程 xslt中英文对照教程 xslt中英文对照教程 XSLT 是一种用于转换 XML 文档的语言。
xslt经典教程—网页设计师必备 真正的全面技术文档
这个是XSLT的入门教程,里面有XPath基本教程和例子!
将XML原文档输入,用XSL作为模板,通过转换引擎,最终输出需要的HTML文档
XPath 教程 XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。 XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。 因此,对 ...
XSLT手册(CHM版)目前最详细的内附教程实例
NULL 博文链接:https://xx371557412.iteye.com/blog/1320913
testng-xslt-1.1.2.zip,用于美化reportng生成的报表,非常好用的工具,欢迎下载
XSL基础教程 从XSLT样式表调用 JavaScript XSLT 是什么类型的语言 XML认证教程,第 4 部分 XSL样式单