|
第14章 XSL变换 匹配节点的模式推荐查看本文HTML版本
xsl:template元素的match特性支持复杂的语法,允许人们精确地表达想要和不想要与哪个节点匹配。xsl:apply-templates、xsl:value-of、xsl:for-each、xsl:copy-of和xsl:sort的select特性支持功能更加强大的语法的超集,允许人们精确地表达想要和不想要选择哪个节点。下面讨论匹配和选择节点的各种模式。14.6.1 匹配根节点为了使输出的文档结构整洁。从XSL变换的第一个输出内容应为输出文档的根元素。因此,XSL样式单一般以应用于根节点的规则开始。要在规则中指定根节点,可将其match特性设置为合适的值。例如:<xsl:template match="/"><html><xsl:apply-templates/></html></xsl:template>本规则应用于根节点,并且只应用于输入树形结构的根节点。当读取到此根节点时,就输出<html>标记,处理根节点的子节点,然后输出</html>标记。本规则推翻了根节点的缺省规则。清单14-6显示了应用于根节点的带有单一规则的样式单。清单14-6:用于根节点的带有单一规则的XSL样式单<?xml version="1.0"?><xsl:stylesheetxmlns:xsl="http://www.w3.org/XSL/Transform/1.0"><xsl:template match="/"><html><head><title>Atomic Number vs. Atomic Weight</title></head><body><table>Atom data will go here< /table></body></html ></xsl:template></xsl:stylesheet>由于本样式单只为根节点提供一条规则,并且由于规则的模板未指明对子节点进行进一步的处理,因而只是按原样输出,所以在模板中所看到的所有内容都将插入到结果文档中。换句话说,将清单14-6中的样式单应用于清单14-1(或其他任何结构整洁的XML文档)中,所获得的结果如下:<html><head><title>Atomic Number vs. AtomicWeight</title></head><body><table>Atom data will go here</table></body></html>14.6.2 匹配元素名正如前面介绍的那样,最基本的模式只包含一个元素名,用来匹配所有带有该名的元素。例如,下面的模板与ATOM元素相匹配,并将ATOM元素的ATOMIC_NUMBER的子元素标成粗体:<xsl:template match=”ATOM”><b><xsl:value-of select=”ATOMIC_NUMBER”/><b></xsl:template>清单14-7显示的是扩充了清单14-6的样式单。首先,在根节点的规则模板中包括了xsl:apply-templates元素。此规则使用select特性来确保只有PERIODIC_TABLE元素获得处理。其次,使用match=“PERIODIC_TABLE”语句创建了只适用于PERIODIC_TABLE元素的规则。本规则设置周期表的标题,然后应用模板来从ATOM元素中生成周期表的主体。最后,ATOM规则使用<xsl:apply-templates select=“NAME”/>、<xsl:apply-templates select=“ATOMIC_NUMBER”/>和<xsl:apply templates select=“ATOMIC_WEIGHT”/>,明确地选择ATOM元素的NAME、ATOMIC_NUMBER和ATOMIC_WEIGHT子元素。它们都包装在HTML的tr和td元素中,以便最终的结果是与原子量相匹配的原子序数表。图14-4显示将清单14-7中的样式单应用于整个周期表文档中的输出结果。对本样式单需要注意的是:在输入文档中的NAME、ATOMIC_NUMBER和ATOMIC_WEIGHT元素的精确顺序是不重要的。它们在输出文档中以选择它们的顺序出现,也就是说首先为原子序数,然后是原子量。相反,在输入文档中,各个原子依字母顺序排序。以后,将会看到如何使用xsl:sort元素来改变这个顺序,以便使用更常规的原子序数的顺序来排列原子。清单14-7:利用select的施用于元素的特定类的模板<?xml version=”1.0”?><xsl:stylesheetxmlns:xsl=”http://www.w3.org/XSL/Transform/1.0”><xsl:template match=”/”><html><head><title>Atomic Number vs. Atomic Weight</title></head><body><xsl:apply-templates select=”PERIODIC_TABLE”/></body></html></xsl:template><xsl:template match=”PERIODIC_TABLE”><hl>Atomic Number vs. Atomic Weight</hl><table><th>Element</th><th>Atomic Number</th><th>Atomic Weight</th><xsl:apply-templates select=”ATOM”/></table></xsl:template><xsl:template match=”ATOM”><tr><td><xsl:value-of select=”NAME”/></td><td><xsl:value-of select=”ATOMIC_NUMBER”/></td><td><xsl:value-of select=”ATOMIC_WEIGHT”/></td></tr></xsl:template></xsl:stylesheet>
[月影社区 http://wf66.com/] [月影读书频道 http://wf66.com/]
| 第14章 XSL变换 匹配节点的模式 2006-9-18 | 转到本主题第:[ 1 ] 页 |
|
|
|