/ sc05.xsl
sc05.xsl
1 <?xml version="1.0" encoding="UTF-8"?> 2 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 <xsl:output method="text"/> 4 5 <!-- Define variables for statistics --> 6 <xsl:variable name="recipeCount" select="count(//recipe)"/> 7 <xsl:variable name="menuCount" select="count(//menu)"/> 8 <xsl:variable name="orderCount" select="count(//order)"/> 9 <xsl:variable name="customerCount" select="count(//customer)"/> 10 <xsl:variable name="deliveryPeopleCount" select="count(//deliveryPerson)"/> 11 <xsl:variable name="commentCount" select="count(//comment)"/> 12 13 <!-- Start transformation --> 14 <xsl:template match="/"> 15 <xsl:text>{</xsl:text> 16 <!-- Statistics --> 17 <xsl:text>"statistics": {</xsl:text> 18 <xsl:text>"recipeCount": </xsl:text><xsl:value-of select="$recipeCount"/>, 19 <xsl:text>"menuCount": </xsl:text><xsl:value-of select="$menuCount"/>, 20 <xsl:text>"orderCount": </xsl:text><xsl:value-of select="$orderCount"/>, 21 <xsl:text>"customerCount": </xsl:text><xsl:value-of select="$customerCount"/>, 22 <xsl:text>"deliveryPeopleCount": </xsl:text><xsl:value-of select="$deliveryPeopleCount"/>, 23 <xsl:text>"commentCount": </xsl:text><xsl:value-of select="$commentCount"/> 24 <xsl:text>},</xsl:text> 25 26 <!-- JSON transformation of elements --> 27 <xsl:text>"data": {</xsl:text> 28 <!-- Recipes --> 29 <xsl:text>"recipes": [</xsl:text> 30 <xsl:apply-templates select="//recipe"/> 31 <xsl:text>],</xsl:text> 32 33 <!-- Menus --> 34 <xsl:text>"menus": [</xsl:text> 35 <xsl:apply-templates select="//menu"/> 36 <xsl:text>],</xsl:text> 37 38 <!-- Orders --> 39 <xsl:text>"orders": [</xsl:text> 40 <xsl:apply-templates select="//order"/> 41 <xsl:text>],</xsl:text> 42 43 <!-- Customers --> 44 <xsl:text>"customers": [</xsl:text> 45 <xsl:apply-templates select="//customer"/> 46 <xsl:text>],</xsl:text> 47 48 <!-- Delivery People --> 49 <xsl:text>"deliveryPeople": [</xsl:text> 50 <xsl:apply-templates select="//deliveryPerson"/> 51 <xsl:text>],</xsl:text> 52 53 <!-- Comments --> 54 <xsl:text>"comments": [</xsl:text> 55 <xsl:apply-templates select="//comment"/> 56 <xsl:text>]</xsl:text> 57 <xsl:text>}</xsl:text> 58 <xsl:text>}</xsl:text> 59 </xsl:template> 60 61 <!-- Template for converting recipe --> 62 <xsl:template match="recipe"> 63 <xsl:text>{"title": "</xsl:text><xsl:value-of select="title"/><xsl:text>", "cuisine": "</xsl:text><xsl:value-of select="cuisine"/><xsl:text>"}</xsl:text> 64 <xsl:if test="position() != last()">,</xsl:if> 65 </xsl:template> 66 67 <!-- Template for converting menu --> 68 <xsl:template match="menu"> 69 <xsl:text>{"name": "</xsl:text><xsl:value-of select="@name"/><xsl:text>", "meals": [</xsl:text> 70 <xsl:for-each select="meal"> 71 <xsl:text>{"type": "</xsl:text><xsl:value-of select="@type"/><xsl:text>", "day": "</xsl:text><xsl:value-of select="@day"/><xsl:text>", "recipeId": "</xsl:text><xsl:value-of select="@recipeId"/><xsl:text>"}</xsl:text> 72 <xsl:if test="position() != last()">,</xsl:if> 73 </xsl:for-each> 74 <xsl:text>]}</xsl:text> 75 <xsl:if test="position() != last()">,</xsl:if> 76 </xsl:template> 77 78 <!-- Template for converting order --> 79 <xsl:template match="order"> 80 <xsl:text>{"id": "</xsl:text><xsl:value-of select="@id"/><xsl:text>", "customerId": "</xsl:text><xsl:value-of select="@customerId"/><xsl:text>", "deliveryPeopleId": "</xsl:text><xsl:value-of select="@deliveryPeopleId"/><xsl:text>", "date": "</xsl:text><xsl:value-of select="@date"/><xsl:text>"}</xsl:text> 81 <xsl:if test="position() != last()">,</xsl:if> 82 </xsl:template> 83 84 <!-- Template for converting customer --> 85 <xsl:template match="customer"> 86 <xsl:text>{"id": "</xsl:text><xsl:value-of select="@id"/><xsl:text>", "name": "</xsl:text><xsl:value-of select="name"/><xsl:text>", "email": "</xsl:text><xsl:value-of select="email"/><xsl:text>", "address": "</xsl:text><xsl:value-of select="address"/><xsl:text>"}</xsl:text> 87 <xsl:if test="position() != last()">,</xsl:if> 88 </xsl:template> 89 90 <!-- Template for converting delivery person --> 91 <xsl:template match="deliveryPerson"> 92 <xsl:text>{"id": "</xsl:text><xsl:value-of select="@id"/><xsl:text>", "name": "</xsl:text><xsl:value-of select="name"/><xsl:text>", "email": "</xsl:text><xsl:value-of select="email"/><xsl:text>", "phone": "</xsl:text><xsl:value-of select="phone"/><xsl:text>"}</xsl:text> 93 <xsl:if test="position() != last()">,</xsl:if> 94 </xsl:template> 95 96 <!-- Template for converting comment --> 97 <xsl:template match="comment"> 98 <xsl:text>{"id": "</xsl:text><xsl:value-of select="@id"/><xsl:text>", "recipeId": "</xsl:text><xsl:value-of select="@recipeId"/><xsl:text>", "customerId": "</xsl:text><xsl:value-of select="@customerId"/><xsl:text>", "text": "</xsl:text><xsl:value-of select="text"/><xsl:text>", "rating": </xsl:text><xsl:value-of select="rating"/><xsl:text>}</xsl:text> 99 <xsl:if test="position() != last()">,</xsl:if> 100 </xsl:template> 101 </xsl:stylesheet>