??????? XSL 將屬性視為屬于XML 文件中的一個(gè)元素,好像是XML 文件中的子元素。然而,要在XSL樣本中讀取屬性,你必須在屬性名稱前加上字符@,作為屬性名稱與元素名稱的識(shí)別。
?????? 例如,在下列起始標(biāo)簽中的篩選運(yùn)算子從所有BOOK 元素,篩選出屬性InStock 的屬性值為「yes」的BOOK 元素。換句話說(shuō),篩選運(yùn)算子篩選出有庫(kù)存的書籍:
????????????? <xsl:for-each select="INVENTORY/BOOK [@InStock=yes]">
???????你可以使用XSL 元素value-of,如同使用它來(lái)擷取元素的文字內(nèi)容的方式一般,來(lái)擷取任何屬性的屬性值。例如下列所示,value-of 元素得到AUTHOR 元素中Born 屬性的屬性值:?????????????
????????????? <xsl:value-of select="AUTHOR/@Born"/>
?????? 在列表10-8 中的樣式表,示范了存取XML 文件中元素屬性值的技巧。這份樣式表被連結(jié)到列表10-9 中的XML文件,并顯示書籍清單中所有庫(kù)存有的書籍。(你可以在隨書光盤的 XslDemo06.xsl 和 XslDemo06.xml 檔案中找到。)
????????????? XslDemo06.xsl
????????????? <?xml version="1.0"?>
????????????? <!--File Name:XslDemo06.xsl -->
????????????? <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
????????????? <xsl:template match="/">
????????????? <H2>Books In Stock</H2>
????????????? <TABLE BORDER="1" CELLPADDING="5">
????????????? <THEAD>
????????????? <TH>Title</TH>
????????????? <TH>Author</TH>
????????????? <TH>Binding Type</TH>
????????????? <TH>Number of Pages</TH>
????????????? <TH>Price</TH>
????????????? </THEAD>
????????????? <xsl:for-each select="INVENTORY/BOOK
????????????? [@InStock=yes]">
????????????? <TR ALIGN="CENTER">
????????????? <TD>
????????????? <xsl:value-of
????????????? select="TITLE"/>
????????????? </TD>
????????????? <TD>
????????????? <xsl:value-of
????????????? select="AUTHOR"/><BR/>
????????????? (born <xsl:value-of
????????????? select="AUTHOR/@Born"/>)
????????????? </TD>
????????????? <TD>
????????????? <xsl:value-of
????????????? select="BINDING"/>
????????????? </TD>
????????????? <TD>
????????????? <xsl:value-of
????????????? select="PAGES"/>
????????????? </TD>
????????????? <TD>
????????????? <xsl:value-of
????????????? select="PRICE"/>
????????????? </TD>
????????????? </TR>
????????????? </xsl:for-each>
????????????? </TABLE>
????????????? </xsl:template>
????????????? </xsl:stylesheet>
?????????????
????????????? XslDemo06.xml
????????????? <?xml version="1.0"?>
????????????? <!--File Name:XslDemo06.xml-->
????????????? <?xml-stylesheet type="text/xsl" href="XslDemo06.xsl"?>
????????????? <INVENTORY>
????????????? <BOOK InStock="yes">
????????????? <TITLE>The Adventures of Huckleberry Finn</TITLE>
????????????? <AUTHOR Born="1835">Mark Twain</AUTHOR>
????????????? <BINDING>mass market paperback</BINDING>
????????????? <PAGES>298</PAGES>
????????????? <PRICE>$5.49</PRICE>
????????????? </BOOK>
????????????? <BOOK InStock="no">
????????????? <TITLE>Leaves of Grass</TITLE>
????????????? <AUTHOR Born="1819">Walt Whitman</AUTHOR>
????????????? <BINDING>hardcover</BINDING>
????????????? <PAGES>462</PAGES>
????????????? <PRICE>$7.75</PRICE>
????????????? </BOOK>
????????????? <BOOK InStock="yes">
????????????? <TITLE>The Marble Faun</TITLE>
????????????? <AUTHOR Born="1804">Nathaniel Hawthorne</AUTHOR>
????????????? <BINDING>trade paperback</BINDING>
????????????? <PAGES>473</PAGES>
????????????? <PRICE>$10.95</PRICE>
????????????? </BOOK>
????????????? <BOOK InStock="yes">
????????????? <TITLE>Moby-Dick</TITLE>
????????????? <AUTHOR Born="1819">Herman Melville</AUTHOR>
????????????? <BINDING>hardcover</BINDING>
????????????? <PAGES>724</PAGES>
????????????? <PRICE>$9.95</PRICE>
????????????? </BOOK>
????????????? </INVENTORY>
????????在XML 文件中的每個(gè)BOOK 元素,皆包含InStock 屬性,藉由設(shè)定屬性值為「yes」或「no」 來(lái)指定此書籍是否有庫(kù)存。每個(gè)AUTHOR 元素使用Born 屬性來(lái)指出作者的出生年份。?????????????
??????? 樣式表使用篩選運(yùn)算子中的屬性,來(lái)從樣式表所顯示的BOOK 元素集合中排除所有缺貨的書籍,而不是顯示屬性InStock 的屬性值:
<xsl:for-each select="INVENTORY/BOOK [@InStock=yes]">
<!--display each BOOK element-->
</xsl:for-each>
??????? 此樣式表將BOOK 元素顯示于HTML 的表格中,而不是在先前范例的SPAN 元素中。它利用XSL 元素value-of 將Born 屬性的屬性值顯示于AUTHOR 元素的值之后。下列的元素會(huì)建立顯示這些屬性值的表格:
<TD>
<xsl:value-of select="AUTHOR"/><BR/>
(born <xsl:value-of select="AUTHOR/@Born"/>)
</TD>