XML/XSLT stylesheet/last — различия между версиями

Материал из Web эксперт
Перейти к: навигация, поиск
 
м (1 версия)
 
(нет различий)

Текущая версия на 11:26, 26 мая 2010

last() as index

   <source lang="xml">

File: Data.xml

<wine grape="Chardonnay">

 <winery>shop 1</winery>
 <product>product 1</product>
 <year>1998</year>
 <desc>description</desc>
 <prices>
   <list>6.99</list>
   <discounted>5.99</discounted>
   <case>71.50</case>
 </prices>

</wine> File: Transform.xslt <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 version="1.0">
 <xsl:output method="xml" omit-xml-declaration="yes" indent="no" />
 
 <xsl:template match="item[3]">
   ~~~~ Start of item element"s template ~~~~ 1. This node: {
   <xsl:apply-templates />
   } 2. First node: {
   <xsl:value-of select="../item[1]" />
   } 3. Last node: {
   <xsl:value-of select="../item[last()]" />
   } 4. Preceding node: {
   <xsl:value-of select="preceding-sibling::item[1]" />
   } 5. Next node: {
   <xsl:value-of select="following-sibling::item[1]" />
   } 6. flavor attribute value of first node: {
   <xsl:value-of select="../item[1]/@flavor" />
   } ~~~~ End of item element"s template ~~~~
 </xsl:template>
 <xsl:template match="item" />

</xsl:stylesheet> Output:

 shop 1
 product 1
 1998
 description
 
   6.99
   5.99
   71.50
 
</source>
   
  


Output a comma if it"s not the last one in the node

   <source lang="xml">

File: Data.xml

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 version="1.0">
 <xsl:output method="xml" omit-xml-declaration="yes" indent="no" />
 <xsl:template match="figure/title">
   <xsl:apply-templates />
 </xsl:template>
 <xsl:template match="para" />

</xsl:stylesheet> File: Transform.xslt <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 version="1.0">
 <xsl:output method="xml" omit-xml-declaration="yes" />
 <xsl:template match="title">
   <xsl:text>title ancestors:</xsl:text>
   <xsl:for-each select="ancestor::*">
     <xsl:value-of select="name()" />
     <xsl:if test="position() != last()">
       <xsl:text>,</xsl:text>
     </xsl:if>
   </xsl:for-each>
 </xsl:template>
 <xsl:template match="para" />
 

</xsl:stylesheet>

</source>
   
  


use last() function to get the context size

   <source lang="xml">

File: Data.xml <?xml version="1.0" encoding="utf-8"?> <Book>

 <Chapter number="c1">the first chapter</Chapter>
 <Chapter number="c2">the second chapter</Chapter>
 <Chapter number="c3">the third chapter</Chapter>
 <Chapter number="c4">the fourth chapter</Chapter>
 <Chapter number="c5">the fifth chapter</Chapter>

</Book> File: Transform.xslt <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet

version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
 <xsl:template match="/">
   <html>
     <head>
       <title>context position and context size.</title>
     </head>
     <body>
       <xsl:apply-templates select="/Book/Chapter" />
     </body>
   </html>
 </xsl:template>
 <xsl:template match="Chapter">
   <xsl:if test="position()=2">
     <paragraph>
       and the context size is <xsl:value-of select="last()" />.
     </paragraph>
   </xsl:if>
 </xsl:template>

</xsl:stylesheet> Output: <html>

  <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <title>context position and context size.</title>
  </head>
  <body>
     <paragraph>
        and the context size is 5.
        
     </paragraph>
  </body>

</html>

</source>