📄 deepxsl4.htm
字号:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<TITLE>深入XSL(4)</TITLE>
<style type="text/css">
<!--
.normal10 { font-size: 10pt}
.normal9 { font-size: 9pt}
p{ font-size: 9pt}
a{ text-decoration: none }
a:hover{ color:Red;text-decoration:underline }
a {
font-size:10.5pt;
COLOR: cornflowerblue;
FONT-FAMILY: "新细明体", "宋体";
FONT-WEIGHT: bold
}
.normal105 { font-size: 10.5pt ;line-height:12pt}
-->
</style>
</HEAD>
<BODY>
<p ALIGN="CENTER">[<a href="../../../default.asp.htm" tppabs="http://www.xml.org.cn:8188/default.asp" target="_parent">返回首页</a>][<a href="../../resource.htm" tppabs="http://www.xml.org.cn:8188/resource/resource.htm" target="_parent">返回资源</a>]</p>
<table width="85%" border="0" align="center">
<tr>
<td width="22%" height="21"> </td>
<td width="53%" height="21">
<h2 align="center"><b><font face="宋体" lang="ZH-CN" size="5">深入XSL(4)<br>
---模板</font></b></h2>
<p align="center"><span class="normal105"><span class="normal11"><span class="normal105">翻译:<a href="mailto:onecenter@yahoo.com">孙一中</a></span></span></span></p>
</td>
<td width="25%" height="21"><a name="top"></a></td>
</tr>
<tr>
<td colspan="3" height="2354" >
<p class="normal11" align="left"><span class="normal105"><span class="normal10"><span class="normal105">上一篇:<font lang=ZH-CN class="normal9"><a href="DeepXSL3.htm" tppabs="http://www.xml.org.cn:8188/resource/article/deepxsl/DeepXSL3.htm" target="_parent">深入XSL(3)--模板规则和模式</a></font><br>
下一篇:<a href="DeepXSL5.htm" tppabs="http://www.xml.org.cn:8188/resource/article/deepxsl/DeepXSL5.htm"><span class="normal11"><b>深入XSL(5)--联合样式表</b></span></a></span></span></span></p>
<p align="JUSTIFY"><b><font face="宋体" lang="ZH-CN" size="3">1 概述</font></b></p>
<p align="JUSTIFY"><font face="宋体" lang="ZH-CN" size="3"><span class="normal105">当应用于源元素的规则被确定后,就要具体实现该规则的模板.一个模板能包含文字结果的元素,
字符数据和产生结果树部分的指令.指令由XSL名域中的元素来表示,可以选择后代元素来处理. 有两类这样的指令, <b>xsl:process-children
</b>和<b>xsl:process</b>; <b>xsl:process-children</b>指令处理源元素的邻近子元素, 而<b>xsl:process</b>指令处理由指定模式来选择的元素.见下例:</span></font></p>
<p align="JUSTIFY"><b><font face="宋体" lang="ZH-CN" size="3"><span class="normal10"><xsl:template
match="chapter/title"><br>
</span></font></b><span class="normal10"><b><font face="宋体" lang="ZH-CN" size="3"><span class="normal10"><fo:rule-graphic/><br>
<fo:block space-before="2pt"><br>
<xsl:text>Chapter </xsl:text><br>
<xsl:number/><br>
<xsl:text>: </xsl:text><br>
<xsl:process-children/><br>
</fo:block><br>
<fo:rule-graphic/><br>
</xsl:template></span></font></b></span></p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY"><b><font face="宋体" lang="ZH-CN" size="3">2 文字结果元素</font></b></p>
<p align="JUSTIFY"><font face="宋体" lang="ZH-CN" size=3><span class="normal105">在一个模板中,样式表中不属于XSL名域的元素具体化将产生相同类型的节点;生成的元素节点会有已经对在模板树中的元素规定的属性.<b>
</b>文字结果元素的一个属性的值被认为是一个属性值模板:它能包含在花括号(<b>{}</b>)中的字符串. 结果元素节点的名域前缀映射是在样式表中移去映射到XSL名域的URI后的映射.因为XSL处理器只作用于属于XSL名域的元素,所以就有这样的问题:如何新建属于XSL名域的元素?URI是</span></font><span class="normal105"><a href="../../../../www.w3.org/TR/WD-xsl" tppabs="http://www.w3.org/TR/WD-xsl"><font face="宋体" lang="ZH-CN">http://www.w3.org/TR/WD-xsl</font></a><font face="宋体" lang="ZH-CN" size=3><span class="normal105">的名域如果紧接出现一个或多个的<b>/quote</b>成为被引用的名域.应用名域将作特殊处理</span>.</font></span></p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY"><b><font face="宋体" lang="ZH-CN" size="3">3 命名属性集</font></b></p>
<p align="JUSTIFY"><font face="宋体" lang="ZH-CN" size=3><b><span class="normal105">xsl:define-attribute-set</span></b><span class="normal105">元素定义了一自命名的属性集合.<span class="normal105">
</span></span></font><span class="normal105"><span class="normal105"><span class="normal105">"<b><font face="宋体" lang="ZH-CN" size=3>name"</font></b><font face="宋体" lang="ZH-CN" size=3>属性规定了属性集的名称.
</font></span></span></span><span class="normal105"><span class="normal105"><font face="宋体" lang="ZH-CN" size=3>
<b>xsl:define-attribute-set</b>元素的内容是一个规定属性的<b>xsl:attribute-set</b>元素.一个文字结果元素或者一个<b>xsl:attribute-set</b>元素能指定一属性集名称为<b>xsl:use</b>属性的值.下面的例子产生了一个称为<b>title-style</b>的属性集并在模板规则中使用它.</font></span></span></p>
<p align="JUSTIFY"><font face="宋体" lang="ZH-CN" size="3"><b><span class="normal10"><xsl:define-attribute-set
name="title-style"><br>
</span></b></font><span class="normal10"><font face="宋体" lang="ZH-CN" size="3"><b><span class="normal10"><xsl:attribute-set
font-size="12pt" font-weight="bold"/><br>
</xsl:define-attribute-set><br>
<xsl:template match="chapter/heading"><br>
<fo:block xsl:use="title-style" quadding="start"><br>
<xsl:process-children/><br>
</fo:block><br>
</xsl:template></span></b></font></span></p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY"><font face="宋体" lang="ZH-CN" size="3"><b>4 模板中的文字</b></font></p>
<p align="JUSTIFY"><font face="宋体" lang="ZH-CN" size="3"><span class="normal105">模板也能包含PCDATA(Parsed
Character Data). 在模板中去除空格后的每个数据字符将在结果树中产生一个数据字符.文字的数据字符也可以包装在一个<b>xsl:text</b>元素中.这样的包装处理可能改变空格的去除但不影响XSL处理器对字符的处理.
</span></font></p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY"><b><font face="宋体" lang="ZH-CN" size="3">5 xsl:process-children的处理</font></b></p>
<p align="JUSTIFY"><font face="宋体" lang="ZH-CN" size="3" class="normal105">下例新建用于chapter元素的块(block)
并处理它的相邻子元素.</font></p>
<p align="JUSTIFY"><b><font face="宋体" lang="ZH-CN" size="3"><span class="normal10"><xsl:template
match="chapter"><br>
</span></font></b><span class="normal10"><b><font face="宋体" lang="ZH-CN" size="3" class="normal10"><fo:block><br>
<xsl:process-children/><br>
</fo:block><br>
</xsl:template></font></b></span></p>
<p align="JUSTIFY"><font face="宋体" lang="ZH-CN" size="3"><b><span class="normal105">xsl:process-children</span></b><span class="normal105">指令处理当前节点的所有子节点,包括字符.
处理源树中的字符是将字符添加到结果树.因此,其中的&lt;标记在源树中表示<字符,该源树将由内置的模板规则在结果树中转换为<字符,而当结果树具体化为一个XML文档时,<字符又将表示为&lt;
.</span></font></p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY"><b><font face="宋体" lang="ZH-CN" size="3">6 xsl:process的处理</font></b></p>
<p align="JUSTIFY"><font face="宋体" lang="ZH-CN" size="3"><b><span class="normal105">xsl:process</span></b><span class="normal105">元素处理由一个模式选择的元素.
<b>xsl:process</b> 元素的模式是一个选择模式,因而它被间接地定位到当前节点.下面的例子对<b>author-group</b>的所有author子节点进行处理:</span></font></p>
<p align="JUSTIFY"><b><font face="宋体" lang="ZH-CN" size="3"><span class="normal10"><xsl:template
match="author-group"><br>
</span></font></b><span class="normal10"><b><font face="宋体" lang="ZH-CN" size="3" class="normal10"><fo:sequence><br>
<xsl:process select="author"/><br>
</fo:sequence><br>
</xsl:template></font></b></span></p>
<p align="JUSTIFY"><font face="宋体" lang="ZH-CN" size="3"><span class="normal105">xsl:process元素处理所有匹配规定模式的元素.字符数据不被<b>xsl:process</b>元素匹配.模式不能包含属性模式(<i>AttributePattern)</i>除非它作为属性限定<i>(AttributeQualifier)</i>的一部分.<i>
</i>模式控制了发生匹配的深度.下例处理所有<b>author</b>节点中<b>first-name</b>元素:</span></font></p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -