灵魂-放水

为学日益,为道日损。

BlogJava 首页 新随笔 联系 聚合 管理
  296 Posts :: 10 Stories :: 274 Comments :: 0 Trackbacks
        XSL 将属性视为属于XML 文件中的一个元素,好像是XML 文件中的子元素。然而,要在XSL样本中读取属性,你必须在属性名称前加上字符@,作为属性名称与元素名称的识别。
       例如,在下列起始标签中的筛选运算子从所有BOOK 元素,筛选出属性InStock 的属性值为「yes」的BOOK 元素。换句话说,筛选运算子筛选出有库存的书籍:
              <xsl:for-each select="INVENTORY/BOOK [@InStock=yes]">
       你可以使用XSL 元素value-of,如同使用它来撷取元素的文字内容的方式一般,来撷取任何属性的属性值。例如下列所示,value-of 元素得到AUTHOR 元素中Born 属性的属性值:             
              <xsl:value-of select="AUTHOR/@Born"/>

       在列表10-8 中的样式表,示范了存取XML 文件中元素属性值的技巧。这份样式表被连结到列表10-9 中的XML文件,并显示书籍清单中所有库存有的书籍。(你可以在随书光盘的 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 文件中的每个BOOK 元素,皆包含InStock 属性,藉由设定属性值为「yes」或「no」 来指定此书籍是否有库存。每个AUTHOR 元素使用Born 属性来指出作者的出生年份。             
        样式表使用筛选运算子中的属性,来从样式表所显示的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 元素的值之后。下列的元素会建立显示这些属性值的表格:
<TD>
<xsl:value-of select="AUTHOR"/><BR/>
(born <xsl:value-of select="AUTHOR/@Born"/>)
</TD>
posted on 2006-04-17 00:14 放水老倌 阅读(1530) 评论(2)  编辑  收藏 所属分类: XML

Feedback

# re: [转]XSLT与XML的属性 2007-06-19 22:41 RunUpwind
我是个初学者,刚才测试了代码,发现
<xsl:for-each select="INVENTORY/BOOK [@InStock=yes]">

<xsl:for-each select="INVENTORY/BOOK [@InStock='yes']">
结果不同。
不知博主是否试过。  回复  更多评论
  

# re: [转]XSLT与XML的属性 2007-06-20 14:12 放水老倌
没试过。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: