本章集中讨论了使用XSL样式单格式化存储在一个元素属性中的数据,因为使用CSS无法访问属性。如果想要包含一个元素的字符数据而不是属性,XSL同样做得很好。只要简单地把元素名称当作xsl:value-of元素的select属性值就能表明一个元素的文本将被复制到输出文档中。请看清单5-8:清单5-8:greeting.xml<?xml version="1.0" standalone="yes"?><?xml-stylesheet type="text/xsl" href="greeting.xsl"?><GREETING>Hello XML!</GREETING>假如要向标题H1中复制致词“Hello XML!”首先,使用xsl:for-each选择GREETING元素:<xsl:for-each select="GREETING"><H1></H1></xsl:for-each>只用这一段语句足以把两个H1标记复制到输出中。使用没有select属性的xsl:value-of在两个H1标记之间放置GREETING元素的文本,当前元素(GREETING)的内容就会被默认选中。清单5-9显示了完整的样式单。清单5-9:greeting.xsl<?xml version="1.0" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"><xsl:template match="/"><HTML><BODY><xsl:for-each select="GREETING"><H1><xsl:value-of/></H1></xsl:for-each></BODY></HTML></xsl:template></xsl:stylesheet>使用select同样可以选择一个子元素中的内容,只需把该子元素的名称当作xsl:value-of的select属性值。例如,在上一章的棒球示例中,队员统计被存储在子元素而不是属性中。假定文档的结构是这样(事实上这种结构比本章中的基于属性的结构更常见),表示击球员表格的XSL如下所示:<TABLE><CAPTION><B>Batters</B></CAPTION><THEAD><TR><TH>Player</TH><TH>P</TH><TH>G</TH><TH>GS</TH><TH>AB</TH><TH>R</TH><TH>H</TH><TH>D</TH><TH>T</TH><TH>HR</TH><TH>RBI</TH><TH>S</TH><TH>CS</TH><TH>SH</TH><TH>SF</TH><TH>E</TH><TH>BB</TH><TH>SO</TH><TH>HBP</TH></TR></THEAD><TBODY><xsl:for-each select="PLAYER [(POSITION!= Starting Pitcher ) $and$(POSITION != Relief Pitcher )]"><TR><TD><xsl:value-of select="GIVEN_NAME"/><xsl:value-of select="SURNAME"/></TD><TD><xsl:value-of select="POSITION"/></TD><TD><xsl:value-of select="GAMES"/></TD><TD><xsl:value-of select="GAMES_STARTED"/></TD><TD><xsl:value-of select="AT_BATS"/></TD><TD><xsl:value-of select="RUNS"/></TD><TD><xsl:value-of select="HITS"/></TD><TD><xsl:value-of select="DOUBLES"/></TD><TD><xsl:value-of select="TRIPLES"/></TD><TD><xsl:value-of select="HOME_RUNS"/></TD><TD><xsl:value-of select="RBI"/></TD><TD><xsl:value-of select="STEALS"/></TD><TD><xsl:value-of select="CAUGHT_STEALING"/></TD><TD><xsl:value-of select="SACRIFICE_HITS"/></TD><TD><xsl:value-of select="SACRIFICE_FLIES"/></TD><TD><xsl:value-of select="ERRORS"/></TD><TD><xsl:value-of select="WALKS"/></TD><TD><xsl:value-of select="STRUCK_OUT"/></TD><TD><xsl:value-of select="HIT_BY_PITCH"/></TD></TR></xsl:for-each><!— PLAYER —></TBODY></TABLE>在这种情况下,在每个PLAYER元素的子元素中,该元素的GIVEN_NAME、SURNAME、POSITION、GAMES、GAMES_STARTED、 AT_BATS、RUNS、HITS、DOUBLES、TRIPLES、HOME_RUNS、RBI、STEALS、CAUGHT_STEALING、SACRIFICE_HITS、SACRIFICE_FLIES、ERRORS、WALKS、STRUCK_OUT和HIT_BY_PITCH子元素的内容被抽取出来并被复制到输出文档中。因为本章使用了与上一章PLAYER子元素名称相同的属性名,该示例与清单5-7几乎是一致的。主要差别是@符号没有了。它表明这是一个属性而不是一个元素。select属性的功能很多。可选择元素:按元素位置(例如第一、第二、最后、第十七个元素等等);按特定的内容;按特殊的属性值;或者按照元素的父或子元素含有一定的内容或属性值进行选择。甚至可以使用全部布尔逻辑运算符来组合各种不同的选择条件。在14章的XSL中将要探讨使用select属性的更多可能。
第5章 属性、空标记和XSL 5.4.7 元素内容与select属性 |