1、<xsl:namespace-alias> 元素
定义和用法
<xsl:namespace-alias> 元素用于在输出中把样式表中的命名空间替换为不同的命名空间,换句话说,使用其他前缀替换与给定命名空间关联的前缀。
注释:<xsl:namespace-alias> 是顶层元素(top-level element),且必须是 <xsl:stylesheet> 或 <xsl:transform> 的子元素。
例子:输入XML文档
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:q0="http://tobacco/ecs/nat/med/receivebusinessreq"
>
<soapenv:Body>
<q0:receiveRequest>
<q0:comCode>comCode</q0:comCode>
<q0:indCode>indCode</q0:indCode>
<q0:requestNum>requestNum</q0:requestNum>
<q0:request>request-xml Content</q0:request>
</q0:receiveRequest>
</soapenv:Body>
</soapenv:Envelope>
用于转换的XSLT文档:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:q0="http://tobacco/ecs/nat/med/receivebusinessreq"
xmlns:out="http://tobacco/ecs/com/med/transRequestCo"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:namespace-alias stylesheet-prefix="q0" result-prefix="out"/>
<xsl:template match="q0:receiveRequest">
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<out:transRequest>
<q0:comCode>This is <xsl:value-of select="q0:comCode"/> </q0:comCode>
<q0:indCode>This is <xsl:value-of select="q0:indCode"/></q0:indCode>
<q0:requestNum>This is <xsl:value-of select="q0:requestNum"/></q0:requestNum>
<q0:requestXML>This is <xsl:value-of select="q0:request"/></q0:requestXML>
</out:transRequest>
</soapenv:Body>
</soapenv:Envelope>
</xsl:template>
</xsl:stylesheet>
输出的转换结果:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:q0="http://tobacco/ecs/nat/med/receivebusinessreq"
xmlns:out="http://tobacco/ecs/com/med/transRequestCo">
<soapenv:Body>
<out:transRequest>
<out:comCode>This is comCode</out:comCode>
<out:indCode>This is indCode</out:indCode>
<out:requestNum>This is requestNum</out:requestNum>
<out:requestXML>This is request-xml Content</out:requestXML>
</out:transRequest>
</soapenv:Body>
</soapenv:Envelope>
结果显示:名称空间发生了变化;
由q0为QName变为由out为QName的前缀。
2、空白处理 strip-space及preserve-space:对空白内容的处理,不是空格的处理!!!!
默认是保留空白。
<xsl:preserve-space> 元素用于定义保留空白的元素。
<xsl:strip-space> 元素用于定义删除空白的元素。
<xsl:preserve-space elements="list-of-element-names"/>
<xsl:strip-space elements="list-of-element-names"/>
注意:elements为必需。一个空格分隔的元素列表,规定了保留/删除空白的元素。
注释:列表中可包含 "*" 和 "prefix:*",这样就可以加入所有元素或来自特定命名空间的所有元素。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--country company price year的文本内容如果只有空格,则会删除空白 -->
<xsl:strip-space elements="country company price year" />
<xsl:preserve-space elements="title artist" />
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="catalog/cd">
<p>
<xsl:value-of select="title" /><br />
<xsl:value-of select="artist" /><br />
<xsl:value-of select="country" /><br />
<xsl:value-of select="company" /><br />
<xsl:value-of select="price" /><br />
<xsl:value-of select="year" />
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
3、<xsl:variable> 元素
<xsl:variable> 元素用于声明局部或全局的变量。
注释:如果被声明为顶层元素,则该变量是全局的,而如果在模板内声明,则变量是本地的。
注释:一旦您设置了变量的值,就无法改变或修改该值!
提示:您可以通过 <xsl:variable> 元素的内容或通过 select 属性,向变量添加值!
<xsl:variable
name="name"
select="expression"> 使用select来定义变量的值。
<!-- Content:template -->
</xsl:variable>
值得注意的地方:
如果设置了 select 属性,<xsl:variable> 元素就不能包含任何内容。如果 select 属性含有文字字符串,则必须给字符串加引号。
<xsl:variable name="color" select="‘red‘" />
<xsl:variable name="header">
<tr>
<th>Element</th>
<th>Description</th>
</tr>
</xsl:variable>
其父元素基本可以为任何的其他输出元素,这与<xsl:param>不一样;并且其值一旦设置后就不能被重新修改。
4、copy及copy-of
1)、<xsl:copy> 元素可创建当前节点的一个副本(拷贝)。
注释:当前节点的 Namespace 节点会被自动复制,但是当前节点的子节点和属性不会被自动复制!
<xsl:copy use-attribute-sets="name-list">
<!-- Content:template -->
</xsl:copy>
例子:把 message 节点拷贝到输出文档:
<?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="message">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
2)、<xsl:copy-of> 元素可创建当前节点的一个副本。
注释:当前节点的 Namespace 节点、子节点以及属性都会被自动复制!
提示:该元素可用于把相同节点的多个副本插入到输出的不同位置。
<xsl:copy-of select="expression"/>
例子:
<xsl:variable name="header">
<tr>
<th>Element</th>
<th>Description</th>
</tr>
</xsl:variable>
<xsl:template match="/">
<html>
<body>
<table>
<xsl:copy-of select="$header" />
5、import
<xsl:import> 元素是顶层元素,用于把一个样式表中的内容倒入另一个样式表中。
注释:被导入的样式的优先级低于导出的样式表。
注释:该元素必须是 <xsl:stylesheet> 或 <xsl:transform> 的第一个子节点。
语法:<xsl:import href="URI"/>
6、<xsl:include> 元素
是顶层元素(top-level element),把一个样式表中的样式表内容包含到另一个样式表中。
注释:被包含的样式表(included style sheet)拥有与包含的样式表(including style sheet)相同的优先级。
注释:该元素必须是 <xsl:stylesheet> 或 <xsl:transform> 的子节点。
include与inmport的差别就在于前者是导入并且存在优先级,而后者是包含到并且不存在优先级。
7、<xsl:apply-imports> 元素
<xsl:apply-imports> 元素可应用来自导入样式表中的模版规则。
导入样式表中的模版规则的优先级要比主样式表中的模版规则要低。如果您希望使用导入样式表中的某条模版规则,而不是主样式表中的某条等价规则,就会用到 <xsl:apply-imports> 元素。
8、<xsl:output> 元素定义了输出文档的格式。
注释:<xsl:output> 是顶层元素(top-level element),必须是 <xsl:stylesheet> 或 <xsl:transform> 的子节点。
<xsl:output
method="xml|html|text|name"
version="string"
encoding="string"
omit-xml-declaration="yes|no"
standalone="yes|no"
doctype-public="string"
doctype-system="string"
cdata-section-elements="namelist"
indent="yes|no"
media-type="string"/>
9、<xsl:text> 元素用于向输出写文本,即通过样式表生成文本节点。
提示:该元素可包含文本、实体引用,以及 #PCDATA。
<xsl:text ="yes|no">
<!-- Content:#PCDATA -->
</xsl:text>
disable-output-escaping:可选。默认值为 "no"。如果值为 "yes",通过实例化 <xsl:text> 元素生成的文本节点在输出时将不进行任何转义。比如如果设置为 "yes",则 "<" 将不进行转换。如果设置为 "no",则被输出为 "<"。 Netscape 6 不支持该属性。
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<p>Titles:
<xsl:for-each select="catalog/cd">
<xsl:value-of select="title"/>
<xsl:if test="position() < last()-1">
<xsl:text>, </xsl:text>
</xsl:if>
<xsl:if test="position()=last()-1">
<xsl:text>, and </xsl:text>
</xsl:if>
<xsl:if test="position()=last()">
<xsl:text>!</xsl:text>
</xsl:if>
</xsl:for-each>
</p>
</body>
</html>
</xsl:template>
10、<xsl:key> 元素
<xsl:key> 元素是顶层元素,它可声明一个命名的键(即为 XML 文档中指定的元素分配的名称和值对)。
此键通过 key() 函数在样式表中使用,帮助您有效地在复杂的 XML 文档中访问分配的元素。。
注释:键不必是唯一的!
语法
<xsl:key
name="name" 键名称
match="pattern" 匹配的元素
use="expression" 键值
/>
初次处理 XSLT 样式表时,键将存储在内部,以便简化访问。键可以简化对 XML 文档中的节点的访问,但是也许不会比使用 XPath 检索相同的节点速度更快。
<?xml version=‘1.0‘?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:key name="title-search" match="book" use="@author"/>
<xsl:template match="/">
<HTML>
<BODY>
<xsl:for-each select="key(‘title-search‘, ‘David Perry‘)">
<div>
<xsl:value-of select="@title"/>
</div>
</xsl:for-each>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
XSLT主要元素2