Mega Code Archive

 
Categories / XML / XSLT StyleSheet
 

Use boolean operator in if statement

File: Data.xml <?xml version="1.0"?> <booklist>   <book category="S">     <title>title 1</title>     <author>author 1</author>   </book>   <book category="FC">     <title>author 1</title>     <author>author 1</author>   </book>   <book category="FC">     <title>title 3</title>     <author>author 1</author>   </book>   <book category="CS">     <title>title 4</title>     <author>author 1</author>     <author>author 2</author>     <author>author 3</author>     <author>author 4</author>   </book> </booklist> File: Transform.xslt <?xml version="1.0"?> <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"   version="2.0">   <xsl:template match="/">     <html>       <body>         <xsl:variable name="all-books" select="//book" />         <xsl:for-each select="$all-books">           <h1>             <xsl:value-of select="title" />           </h1>           <p>             <i>by</i>             <xsl:value-of select="author[1]" />             <xsl:if test="count(author)!=1">               and others             </xsl:if>           </p>           <xsl:variable name="others" select="$all-books[./@category=current()/@category and not(. is current())]" />           <xsl:if test="$others">             <p>Other books in this category:</p>             <ul>               <xsl:for-each select="$others">                 <li>                   <xsl:value-of select="title" />                 </li>               </xsl:for-each>             </ul>           </xsl:if>         </xsl:for-each>       </body>     </html>   </xsl:template> </xsl:transform> Output: <html>    <body>       <h1>title 1</h1>       <p><i>by</i>author 1       </p>       <h1>author 1</h1>       <p><i>by</i>author 1       </p>       <p>Other books in this category:</p>       <ul>          <li>title 3</li>       </ul>       <h1>title 3</h1>       <p><i>by</i>author 1       </p>       <p>Other books in this category:</p>       <ul>          <li>author 1</li>       </ul>       <h1>title 4</h1>       <p><i>by</i>author 1                        and others                             </p>    </body> </html>