EDUCBA

EDUCBA

MENUMENU
  • Free Tutorials
  • Free Courses
  • Certification Courses
  • 600+ Courses All in One Bundle
  • Login
Home Software Development Software Development Tutorials XML Tutorial XSLT choose
Secondary Sidebar
Magic Number in C

Phishing and Pharming

Shell Scripting Interview Questions

Software Testing Interview Questions

What is JavaScript?

WordPress vs Wix

XSLT choose

XSLT choose

Definition of XSLT choose

XSLT choose is defined as the if-else construct that contains a sequence of conditions with multiple variables. To go with multiple options, we are happened to use the <choose> element and tests a Boolean Expression. They assist conditional tests of complex types to use against the XML source file.

Syntax:

Start Your Free Software Development Course

Web development, programming languages, Software testing & others

The Syntax declaration of XSLT choose element is given as

<xsl:choose>
<when test=” exp1”> // evaluates the true expression Statement
<otherwise> // evaluates a False Statement
</xsl:choose>

These elements have two child elements that resemble the if-else part. <xsl: when> constructs can have one or more child elements and meanwhile <xsl: otherwise> has zero or one.

How choose function works in XSLT?

The choose function adds <xsl: when >and <xsl: otherwise> to them to define multiple conditions or when we need to use a sequence of alternatives. The <choose >element works by taking the first declared <xsl: when> element that is matched is evaluated in the output. If None of the test matches then the contents of the <otherwise> is given for the output.

Even the <choose> element handles nested <when> elements with a single <otherwise> element. In the below examples we have used an input XML with various cases and XSL transform uses <choose> element to evaluate the true and false from the expressions. It falls within the template with none of the attributes.

Examples

Example #1

XML

<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<Online>
<Academy enroll = "255">
<University>Neustach omnegres</University>
<Location>Germany</Location>
<Accrediation>WHCCC</Accrediation>
<Score>85</Score>
</Academy>
<Academy enroll = "255">
<University>Neustach omnegres</University>
<Location>Germany</Location>
<Accrediation>WHCCC</Accrediation>
<Score>85</Score>
</Academy>
<Academy enroll = "255">
<University>Neustach omnegres</University>
<Location>Germany</Location>
<Accrediation>WHCCC</Accrediation>
<Score>85</Score>
</Academy>
</Online>

XSL

<?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>
<body>
<h2>Education Academy</h2>
<table border = "1.2">
<tr bgcolor = "#9acd32">
<th>enroll</th>
<th>University</th>
<th>Location</th>
<th>Accrediation</th>
<th>Score</th>
<th>Grade</th>
</tr>
<xsl:for-each select = "class/Academy">
<tr>
<td><xsl:value-of select = "@enroll"/></td>
<td><xsl:value-of select = "University"/></td>
<td><xsl:value-of select = "Location"/></td>
<td><xsl:value-of select = "Accrediation"/></td>
<td><xsl:value-of select = "Score"/></td>
<td>
<xsl:choose>
<xsl:when test = "Score > 95">
A+ Grade
</xsl:when>
<xsl:when test = "Score > 80">
B Grade
</xsl:when>
<xsl:otherwise>
Low
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Explanation

The above code adds a background color to the column when the test case of a score is greater than 85. And the stylesheet has two when the statement under an <choose> element.

Output:

Spring 1

Example #2

XML

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="sschoose.xsl" ?>
<Woods>
<Wood>
<lengthitem> Drywalll Screws
</lengthitem>
<prize>900</prize>
</Wood>
<Wood>
<lengthitem> Fastening Screws
</lengthitem>
<prize>600</prize>
</Wood>
<Wood>
<lengthitem>Hammer
</lengthitem>
<prize>400</prize>
</Wood>
</Woods>

XSL

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="Wood">
<xsl:choose>
<xsl:when test="prize &lt; 400">
(small)
</xsl:when>
<xsl:when test="prize &gt; 600">
(medium)
</xsl:when>
<xsl:otherwise>
(large)
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates />
<BR/>
</xsl:template>
</xsl:stylesheet>

Explanation

Here the multiple conditions I checked with the otherwise and when elements. The child elements are tested from top to bottom until a test condition met the source data or the else statement like <otherwise> is chosen.

Output:

Spring 2

Example #3

XML

<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "ecommp.xsl"?>
<e-comm>
<product Category="Accessories">
<pid>154</pid>
<Description>Mobile Cell holder with sling bag</Description>
<fabric>Glass</fabric>
<price>36.99</price>
</product>
<product Category="Electronics">
<pid>164</pid>
<Description>Android Support graphics Drawing Battery-Stylus Free</Description>
<fabric> Tablets</fabric>
<price>56.99</price>
</product>
<product Category="Electronics">
<pid>154</pid>
<Description>iPhone 12 with 128GB</Description>
<fabric> Apple Store</fabric>
<price>6.99</price>
</product>
<product Category="Accessories">
<pid>574</pid>
<Description>MAC Support graphics Drawing Battery-Stylus Free</Description>
<fabric> Tablets</fabric>
<price>17.99</price>
</product>
<product Category="Fashions">
<pid>133</pid>
<Description>New Season Style Show Toppers</Description>
<fabric>Rayon</fabric>
<price>66.55</price>
</product>
<product Category="Footwear">
<pid>335</pid>
<Description>Casual shoes and sneakers</Description>
<fabric> Smart Casuals</fabric>
<price>14.99</price>
</product>
</e-comm>

XSL

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<head>
<title>XSLT multiple conditions in xslt</title>
</head>
<body>
<h2 style="color:DarkYellow; font-style:italic;">XSLT</h2>
<table border="1.5" cellpadding="6" cellspacing="0" bordercolor="Red">
<tr bgcolor="Aqua" style="color:White; font-weight:bold">
<td>Product ID</td>
<td>Name of product</td>
<td>Fabric Type</td>
<td> Price</td>
</tr>
<xsl:for-each select="e-comm/product">
<tr bgcolor="DarkSalmon" style="color:Slate Blue; font-weight:normal">
<td height="7">
<xsl:value-of select="pid"/>
</td>
<td height="7">
<xsl:value-of select="Description"/>
</td>
<td height="7">
<xsl:value-of select="fabric"/>
</td>
<xsl:choose>
<xsl:when test="price &lt; 20">
<td height="8" style="color:Brown; font-weight:bold; font-style:italic;">
<xsl:value-of select="price"/>
</td>
</xsl:when>
<xsl:when test="price &gt; 100 and price &lt; 42">
<td height="8" style="color:Crimson; font-weight:bold; font-style:italic;">
<xsl:value-of select="price"/>
</td>
</xsl:when>
<xsl:otherwise>
<td height="8">
<xsl:value-of select="price"/>
</td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Explanation

The code adds the Background color to the test condition if the prize is lesser or greater. The result of the above is given below.

Output:

Spring 3

Example #4

pr.xml

<?xml version="1.0"?>
<Product_list>
<Pro type="Babymilk">
<pname>Dexolac</pname>
<vitamin>76</vitamin>
<carbohydrates>82</carbohydrates>
<protein>76</protein>
<minerals>568</minerals>
</Pro>
<Pro type="Babymilk">
<pname>Nano Pro</pname>
<vitamin>62</vitamin>
<carbohydrates>45</carbohydrates>
<protein>89</protein>
<minerals>558</minerals>
</Pro>
<Pro type="Babymilk_present">
<pname>SimMomIQ</pname>
<vitamin>66</vitamin>
<carbohydrates>86</carbohydrates>
<protein>72</protein>
<minerals>632</minerals>
</Pro>
<Pro type="Babymilk">
<pname>Enfagrow</pname>
<vitamin>75</vitamin>
<carbohydrates>70</carbohydrates>
<protein>89</protein>
<minerals>810</minerals>
</Pro>
<Pro type="Babymilk_new">
<pname>Nestle</pname>
<vitamin>54</vitamin>
<carbohydrates>85</carbohydrates>
<protein>77</protein>
<minerals>56</minerals>
</Pro>
</Product_list>

pr.xsl

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Product_list">
<table>
<tr style="background-color:##a57c6c">
<th>Pro</th>
<th>carbo (g)</th>
<th>Fiber (g)</th>
<th>cholestrol (g)</th>
<th>Energy (kj)</th>
</tr>
<xsl:for-each select="Pro">
<xsl:choose>
<xsl:when test="@type = 'Babymilk_new'">
<tr style="background-color:#40e0d0">
<td>
<xsl:value-of select="pname"/>
</td>
<td>
<xsl:value-of select="vitamin"/>
</td>
<td>
<xsl:value-of select="carbohydrates"/>
</td>
<td>
<xsl:value-of select="protein"/>
</td>
<td>
<xsl:value-of select="minerals"/>
</td>
</tr>
</xsl:when>
<xsl:when test="@type = 'Babymilk_present'">
<tr style="background-color:#d27025">
<td>
<xsl:value-of select="pname"/>
</td>
<td>
<xsl:value-of select="carbohydrates"/>
</td>
<td>
<xsl:value-of select="vitamin"/>
</td>
<td>
<xsl:value-of select="protein"/>
</td>
<td>
<xsl:value-of select="minerals"/>
</td>
</tr>
</xsl:when>
<xsl:otherwise>
<tr style="background-color:#cccccc">
<td>
<xsl:value-of select="pname"/>
</td>
<td>
<xsl:value-of select="carbohydrates"/>
</td>
<td>
<xsl:value-of select="vitamin"/>
</td>
<td>
<xsl:value-of select="protein"/>
</td>
<td>
<xsl:value-of select="minerals"/>
</td>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>

Explanation

The above highlights the content of the product table with the background colors and the output looks like something as below. So here in the XSL file, we have selected an attribute product list and the value is found using ’@’. And the respective pname is highlighted with different colors. And if no pname is selected it is automatically directed to <otherwise>.

Output:

XSLT

Example #5

Book details checking the condition for a prize using a single choose attribute

book.xml

<?xml version="1.0" encoding="UTF-8"?>
<bookdb>
<dept>
<bname>Data Science</bname>
<author>Thomas Cerian</author>
<country>USA</country>
<bprice>20.90</bprice>
<pubyear>1975</pubyear>
</dept>
<dept>
<bname>Artificial Itelligence</bname>
<author>Aron amrk</author>
<country>Italy</country>
<bprice>22.90</bprice>
<pubyear>1965</pubyear>
</dept>
<dept>
<bname>R Languagr</bname>
<author>Evangeline lawrence</author>
<country>German</country>
<bprice>15.90</bprice>
<pubyear>1995</pubyear>
</dept>
</bookdb>
book.xsl
<?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>
<body>
<h2>My movie Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>bname</th>
<th>author</th>
</tr>
<xsl:for-each select="bookdb/dept">
<tr>
<td><xsl:value-of select="bname"/></td>
<xsl:choose>
<xsl:when test="bprice > 20">
<td bgcolor="#ff00ff">
<xsl:value-of select="author"/>
</td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="author"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Explanation

A Typical simple rule with the <choose> is implied with the <when> element associated with the XSL file and XML file and the output looks like below:

Output:

XSLT 1

Advantages

  • The <choose> element avoids exit or breaks statements, Unlike Switch Statement. It behaves very similarly to the Switch Statement in other Middle-Level Language.
  • And doesn’t have any attributes to associate with the element.

Conclusion

Coming to an end, the <choose> element in XSL is represented in a different construction compared to other languages because it is very similar to the if-else condition statement. In this article, we have gone different construct named choose and otherwise in which XSL has a Traverse descending making in searching the condition to be met.

Recommended Articles

This is a guide to XSLT choose. Here we discuss definition, syntax, and parameters, How choose function work in XSLT? examples with code implementation. You may also have a look at the following articles to learn more –

  1. XML file format
  2. XML DOM
  3. Oracle XML
  4. Rust XML
Primary Sidebar
Footer
About Us
  • Blog
  • Who is EDUCBA?
  • Sign Up
  • Live Classes
  • Corporate Training
  • Certificate from Top Institutions
  • Contact Us
  • Verifiable Certificate
  • Reviews
  • Terms and Conditions
  • Privacy Policy
  •  
Apps
  • iPhone & iPad
  • Android
Resources
  • Free Courses
  • Java Tutorials
  • Python Tutorials
  • All Tutorials
Certification Courses
  • All Courses
  • Software Development Course - All in One Bundle
  • Become a Python Developer
  • Java Course
  • Become a Selenium Automation Tester
  • Become an IoT Developer
  • ASP.NET Course
  • VB.NET Course
  • PHP Course

ISO 10004:2018 & ISO 9001:2015 Certified

© 2023 - EDUCBA. ALL RIGHTS RESERVED. THE CERTIFICATION NAMES ARE THE TRADEMARKS OF THEIR RESPECTIVE OWNERS.

EDUCBA

*Please provide your correct email id. Login details for this Free course will be emailed to you

Let’s Get Started

By signing up, you agree to our Terms of Use and Privacy Policy.

EDUCBA

*Please provide your correct email id. Login details for this Free course will be emailed to you
EDUCBA

*Please provide your correct email id. Login details for this Free course will be emailed to you
EDUCBA Login

Forgot Password?

By signing up, you agree to our Terms of Use and Privacy Policy.

This website or its third-party tools use cookies, which are necessary to its functioning and required to achieve the purposes illustrated in the cookie policy. By closing this banner, scrolling this page, clicking a link or continuing to browse otherwise, you agree to our Privacy Policy

Loading . . .
Quiz
Question:

Answer:

Quiz Result
Total QuestionsCorrect AnswersWrong AnswersPercentage

Explore 1000+ varieties of Mock tests View more