Bob's Burgers: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Line 578: Line 578:
   <xsl:output method="xml" indent="yes"/>
   <xsl:output method="xml" indent="yes"/>
   <xsl:template match="/Menu">
   <xsl:template match="/Menu">
     <html>
     <Menu>
      <style>
       <xsl:for-each select="Item">
        table {
        <Item>
        border-collapse: collapse;
          <ItemName>
        margin: 25px;
            <xsl:value-of select="ItemName"/>
        margin-bottom: 50px;
          </ItemName>
        }
          <Description>
        th, td {
            <xsl:value-of select="Description"/>
        border: 1px solid #ccc;
          </Description>
        padding: 10px;
          <IntoleranceFreeFood>
        text-align: center;
            <xsl:for-each select="IntoleranceFreeFood/IntoleranceFree">
        }
              <IntoleranceFree>
        td.exept{
                <xsl:value-of select="."/>
        text-align: left;
               </IntoleranceFree>
        width:60%
        }
      </style>
       <body>
        <h1 align="center">Menu</h1>
        <table>
          <thead>
            <tr class="border">
              <td align="center" colspan="4">
                <h2>Dishes</h2>
              </td>
            </tr>
            <tr class="TableHead">
              <th rowspan="2">Name</th>
              <th colspan="3">Price</th>
            </tr>
            <tr>
              <th>Small</th>
              <th>Medium</th>
              <th>Large</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td colspan="4">Main course</td>
            </tr>
            <xsl:for-each select="Item">
              <xsl:if test="@Category='Dish' and @MenuCategorie = 'Main course'">
                <tr>
                  <td class="exept">
                    <xsl:value-of select="ItemName"/><br/>
                    Description:<xsl:value-of select="Description"/>
                    <br/>
                    Additional information:
                    <ul>
                      <xsl:for-each select="IntoleranceFreeFood/IntoleranceFree">
                        <li>
                          <xsl:value-of select="."/>
                        </li>
                      </xsl:for-each>
                    </ul>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Small'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Medium'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Large'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                </tr>
               </xsl:if>
             </xsl:for-each>
             </xsl:for-each>
            <tr>
          </IntoleranceFreeFood>
              <td colspan="4">Dessert</td>
          <Portions>
             </tr>
             <Portion>
            <xsl:for-each select="Item">
              <xsl:for-each select="Portions/Portion">
              <xsl:if test="@Category='Dish' and @MenuCategorie = 'Dessert'">
                 <PortionPrice>
                 <tr>
                   <xsl:value-of select="PortionPrice"/>
                   <td class="exept">
                  <xsl:value-of select="PortionPrice/@Currency"/>
                    <xsl:value-of select="ItemName"/><br/>
                </PortionPrice>
                    Description:<xsl:value-of select="Description"/>
                <PortionSize>
                    <br/>
                  <xsl:for-each select="PortionSize/Size">
                    Additional information:
                    <Size>
                    <ul>
                      <xsl:value-of select="."/>
                      <xsl:for-each select="IntoleranceFreeFood/IntoleranceFree">
                       <xsl:value-of select="./@Units"/>
                        <li>
                    </Size>
                          <xsl:value-of select="."/>
                  </xsl:for-each>
                        </li>
                </PortionSize>
                      </xsl:for-each>
              </xsl:for-each>
                    </ul>
            </Portion>
                  </td>
          </Portions>
                  <td>
          <Ingredients>
                    <xsl:for-each select="Portions/Portion">
            <xsl:for-each select="Ingredients/Ingredient">
                       <xsl:if test="@PortionType = 'Small'">
              <Ingredient>
                        <xsl:value-of select="PortionPrice"/>
                <xsl:value-of select="."/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                <xsl:value-of select="./@Quantity"/>
                      </xsl:if>
                <xsl:value-of select="./@Units"/>
                    </xsl:for-each>
               </Ingredient>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Medium'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Large'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                </tr>
               </xsl:if>
             </xsl:for-each>
             </xsl:for-each>
           </tbody>
           </Ingredients>
         </table>
         </Item>
        <table>
      </xsl:for-each>
          <thead>
     </Menu>
            <tr class="border">
              <td align="center" colspan="4">
                <h2>Drinks</h2>
              </td>
            </tr>
            <tr class="TableHead">
              <th rowspan="2">Name</th>
              <th colspan="3">Price</th>
            </tr>
            <tr>
              <th>Small</th>
              <th>Medium</th>
              <th>Large</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td colspan="4">Alcohol</td>
            </tr>
            <xsl:for-each select="Item">
              <xsl:if test="@Category='Drink'and @MenuCategorie = 'Alcohol'">
                <tr>
                  <td class="exept">
                    <xsl:value-of select="ItemName"/><br/>
                    Description:<xsl:value-of select="Description"/>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Small'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Medium'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Large'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                </tr>
              </xsl:if>
            </xsl:for-each>
            <tr>
              <td colspan="4">Non-Alcohol</td>
            </tr>
            <xsl:for-each select="Item">
              <xsl:if test="@Category='Drink'and @MenuCategorie != 'Alcohol'">
                <tr>
                  <td class="exept">
                    <xsl:value-of select="ItemName"/><br/>
                    Description:<xsl:value-of select="Description"/>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Small'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Medium'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Large'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                </tr>
              </xsl:if>
            </xsl:for-each>
          </tbody>
        </table>
      </body>
     </html>
   </xsl:template>
   </xsl:template>
</xsl:stylesheet>
</xsl:stylesheet>
</pre>
</pre>

Revision as of 20:27, 19 March 2017

Meeskond

  • Aleksei Kopõlov
  • Sander Perens

Idee

XML/XSD/XSLT

XML

<?xml version="1.0" encoding="utf-8"?>
<Menu>
  <Item Category="Dish" MenuCategorie="Main course">
    <ItemName><![CDATA[Chicken & mushroom risotto]]></ItemName>
    <ItemType>
      <Type>Spicy</Type>
    </ItemType>
    <Portions>
      <Portion PortionType="Small">
        <PortionPrice Currency="€">10.95</PortionPrice>
        <PortionSize>
          <Size Units="g">300</Size>
          <Size Units="Person">1</Size>
        </PortionSize>
      </Portion>
      <Portion PortionType="Medium">
        <PortionPrice Currency="€">19.95</PortionPrice>
        <PortionSize>
          <Size Units="g">600</Size>
          <Size Units="Person">2</Size>
        </PortionSize>
      </Portion>
    </Portions>
    <Description>Looks good</Description>
    <Ingredients>
      <Ingredient Units="g" Quantity="50">Butter</Ingredient>
      <Ingredient Units="g" Quantity="100">Bacon</Ingredient>
      <Ingredient Units="g" Quantity="100">Rice</Ingredient>
      <Ingredient Units="ml" Quantity="50">White wine</Ingredient>
    </Ingredients>
    <IntoleranceFreeFood>
      <IntoleranceFree>Lactose Free</IntoleranceFree>
      <IntoleranceFree>Gluten free</IntoleranceFree>
    </IntoleranceFreeFood>
  </Item>

  <Item Category="Dish" MenuCategorie="Main course">
    <ItemName><![CDATA[Pilaff]]></ItemName>
    <ItemType>
      <Type>Spicy</Type>
      <Type>mediterranean</Type>
    </ItemType>
    <Portions>
      <Portion PortionType="Small">
        <PortionPrice Currency="€">5</PortionPrice>
        <PortionSize>
          <Size Units="g">300</Size>
          <Size Units="Person">1</Size>
        </PortionSize>
      </Portion>
      <Portion PortionType="Medium">
        <PortionPrice Currency="€">6</PortionPrice>
        <PortionSize>
          <Size Units="g">600</Size>
          <Size Units="Person">2</Size>
        </PortionSize>
      </Portion>
      <Portion PortionType="Large">
        <PortionPrice Currency="€">7</PortionPrice>
        <PortionSize>
          <Size Units="g">900</Size>
          <Size Units="Person">3</Size>
        </PortionSize>
      </Portion>
    </Portions>
    <Description>Looks good</Description>
    <Ingredients>
      <Ingredient Units="g" Quantity="50">Butter</Ingredient>
      <Ingredient Units="g" Quantity="100">Bacon</Ingredient>
      <Ingredient Units="g" Quantity="100">Rice</Ingredient>
    </Ingredients>
    <IntoleranceFreeFood>
      <IntoleranceFree>Lactose Free</IntoleranceFree>
      <IntoleranceFree>Gluten free</IntoleranceFree>
    </IntoleranceFreeFood>
  </Item>

  <Item Category="Dish" MenuCategorie="Dessert">
    <ItemName><![CDATA[Classic Tiramisu]]></ItemName>
    <ItemType>
      <Type>Spicy</Type>
      <Type>Sour</Type>
    </ItemType>
    <Portions>
      <Portion PortionType="Small">
        <PortionPrice Currency="€">10.95</PortionPrice>
        <PortionSize>
          <Size Units="g">300</Size>
          <Size Units="Person">1</Size>
        </PortionSize>
      </Portion>
      <Portion PortionType="Medium">
        <PortionPrice Currency="€">19.95</PortionPrice>
        <PortionSize>
          <Size Units="g">600</Size>
          <Size Units="Person">2</Size>
        </PortionSize>
      </Portion>
    </Portions>
    <Description>Looks good, tastes okay</Description>
    <Ingredients>
      <Ingredient Units="g" Quantity="50">Butter</Ingredient>
      <Ingredient Units="g" Quantity="100">Bacon</Ingredient>
      <Ingredient Units="g" Quantity="100">Rice</Ingredient>
      <Ingredient Units="g" Quantity="50">White wine</Ingredient>
    </Ingredients>
  </Item>

  <Item Category="Dish" MenuCategorie="Dessert">
    <ItemName><![CDATA[Pavlova]]></ItemName>
    <ItemType>
      <Type>Sweet</Type>
    </ItemType>
    <Portions>
      <Portion PortionType="Small">
        <PortionPrice Currency="€">13.13</PortionPrice>
        <PortionSize>
          <Size Units="g">300</Size>
          <Size Units="Person">2</Size>
        </PortionSize>
      </Portion>
      <Portion PortionType="Large">
        <PortionPrice Currency="€">27.99</PortionPrice>
        <PortionSize>
          <Size Units="g">600</Size>
          <Size Units="Person">4</Size>
        </PortionSize>
      </Portion>
    </Portions>
    <Description>Pavlova typically garnished with strawberries, passionfruit, kiwifruit and cream. Pavlova is a meringue-based dessert named after the Russian ballerina Anna Pavlova. It is a meringue dessert with a crisp crust and soft, light inside, usually topped with fruit and whipped cream.</Description>
    <Ingredients>
      <Ingredient Units="g" Quantity="50">strawberries</Ingredient>
      <Ingredient Units="g" Quantity="100">passionfruit</Ingredient>
      <Ingredient Units="g" Quantity="100">kiwifruit</Ingredient>
      <Ingredient Units="ml" Quantity="100">cream</Ingredient>
    </Ingredients>
  </Item>

  <Item Category="Drink" MenuCategorie="Alcohol">
    <ItemName><![CDATA[Jem Beam]]></ItemName>
    <ItemType>
      <Type>Whisky</Type>
    </ItemType>
    <Portions>
      <Portion PortionType="Small">
        <PortionPrice Currency="€">2.95</PortionPrice>
        <PortionSize>
          <Size Units="ml">30</Size>
          <Size Units="Shots">1</Size>
        </PortionSize>
      </Portion>
      <Portion PortionType="Medium">
        <PortionPrice Currency="€">14.95</PortionPrice>
        <PortionSize>
          <Size Units="ml">300</Size>
          <Size Units="Shots">10</Size>
        </PortionSize>
      </Portion>
    </Portions>
    <Description>Whisky</Description>
  </Item>

  <Item Category="Drink" MenuCategorie="Juice">
    <ItemName><![CDATA[Apple juice]]></ItemName>
    <ItemType>
      <Type>Juice</Type>
    </ItemType>
    <Portions>
      <Portion PortionType="Small">
        <PortionPrice Currency="€">1.05</PortionPrice>
        <PortionSize>
          <Size Units="ml">200</Size>
        </PortionSize>
      </Portion>
      <Portion PortionType="Medium">
        <PortionPrice Currency="€">1.55</PortionPrice>
        <PortionSize>
          <Size Units="ml">300</Size>
        </PortionSize>
      </Portion>
    </Portions>
    <Description>Freshly pressed from green apples</Description>
  </Item>

  <Item Category="Drink" MenuCategorie="Water">
    <ItemName><![CDATA[Still water]]></ItemName>
    <ItemType>
      <Type>Water</Type>
    </ItemType>
    <Portions>
      <Portion PortionType="Small">
        <PortionPrice Currency="€">1</PortionPrice>
        <PortionSize>
          <Size Units="ml">200</Size>
        </PortionSize>
      </Portion>
      <Portion PortionType="Medium">
        <PortionPrice Currency="€">1.50</PortionPrice>
        <PortionSize>
          <Size Units="ml">300</Size>
        </PortionSize>
      </Portion>
      <Portion PortionType="Large">
        <PortionPrice Currency="€">2</PortionPrice>
        <PortionSize>
          <Size Units="ml">500</Size>
        </PortionSize>
      </Portion>
    </Portions>
    <Description>From tap</Description>
  </Item>

  <Item Category="Drink" MenuCategorie="Alcohol">
    <ItemName><![CDATA[Saku Kuld]]></ItemName>
    <ItemType>
      <Type>Beer</Type>
    </ItemType>
    <Portions>
      <Portion PortionType="Small">
        <PortionPrice Currency="€">3.50</PortionPrice>
        <PortionSize>
          <Size Units="ml">300</Size>
        </PortionSize>
      </Portion>
      <Portion PortionType="Medium">
        <PortionPrice Currency="€">5</PortionPrice>
        <PortionSize>
          <Size Units="ml">500</Size>
        </PortionSize>
      </Portion>
    </Portions>
    <Description>Saku Kuld is the finest beer of Estonia’s oldest brewery. It is the cream of the crop when it comes to beers. Saku Kuld is a masterpiece that entwines two centuries of brewing traditions with the latest technology.</Description>
  </Item>
</Menu>

XSD

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Menu">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Item" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ItemName" type="xs:string" maxOccurs="1" minOccurs="1"/>
              <xs:element name="ItemType" maxOccurs="1">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Type" type ="xs:string" maxOccurs="unbounded"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="Portions" minOccurs="1">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Portion" minOccurs="1" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="PortionPrice" minOccurs="1" maxOccurs="1">
                            <xs:complexType>
                              <xs:simpleContent>
                                <xs:extension base="xs:decimal">
                                  <xs:attribute name="Currency" type="xs:string"/>
                                </xs:extension>
                              </xs:simpleContent>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="PortionSize" minOccurs="1" maxOccurs="1">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="Size" minOccurs="1" maxOccurs="unbounded">
                                  <xs:complexType>
                                    <xs:simpleContent>
                                      <xs:extension base="xs:decimal">
                                        <xs:attribute name="Units" type="xs:string"/>
                                      </xs:extension>
                                    </xs:simpleContent>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                        <xs:attribute name="PortionType" type="xs:string" use="required"/>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="Description" type="xs:string" minOccurs="1" maxOccurs="1"/>
              <xs:element name="Ingredients" minOccurs="0" maxOccurs="1">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Ingredient" minOccurs="0" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:string">
                            <xs:attribute name="Units" type="xs:string"/>
                            <xs:attribute name="Quantity" type="xs:decimal"/>
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="IntoleranceFreeFood" minOccurs="0" maxOccurs="1">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="IntoleranceFree" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="Category" type="xs:string"/>
            <xs:attribute name="MenuCategorie" type="xs:string" use="required"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSLT HTML

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:output method="html" indent="yes"/>
  <xsl:template match="/Menu">
    <html>
      <style>
        table {
        border-collapse: collapse;
        margin: 25px;
        margin-bottom: 50px;
        }
        th, td {
        border: 1px solid #ccc;
        padding: 10px;
        text-align: center;
        }
        td.exept{
        text-align: left;
        width:60%
        }
      </style>
      <body>
        <h1 align="center">Menu</h1>
        <table>
          <thead>
            <tr class="border">
              <td align="center" colspan="4">
                <h2>Dishes</h2>
              </td>
            </tr>
            <tr class="TableHead">
              <th rowspan="2">Name</th>
              <th colspan="3">Price</th>
            </tr>
            <tr>
              <th>Small</th>
              <th>Medium</th>
              <th>Large</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td colspan="4">Main course</td>
            </tr>
            <xsl:for-each select="Item">
              <xsl:if test="@Category='Dish' and @MenuCategorie = 'Main course'">
                <tr>
                  <td class="exept">
                    <xsl:value-of select="ItemName"/><br/>
                    Description:<xsl:value-of select="Description"/>
                    <br/>
                    Additional information:
                    <ul>
                      <xsl:for-each select="IntoleranceFreeFood/IntoleranceFree">
                        <li>
                          <xsl:value-of select="."/>
                        </li>
                      </xsl:for-each>
                    </ul>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Small'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Medium'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Large'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                </tr>
              </xsl:if>
            </xsl:for-each>
            <tr>
              <td colspan="4">Dessert</td>
            </tr>
            <xsl:for-each select="Item">
              <xsl:if test="@Category='Dish' and @MenuCategorie = 'Dessert'">
                <tr>
                  <td class="exept">
                    <xsl:value-of select="ItemName"/><br/>
                    Description:<xsl:value-of select="Description"/>
                    <br/>
                    Additional information:
                    <ul>
                      <xsl:for-each select="IntoleranceFreeFood/IntoleranceFree">
                        <li>
                          <xsl:value-of select="."/>
                        </li>
                      </xsl:for-each>
                    </ul>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Small'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Medium'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Large'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                </tr>
              </xsl:if>
            </xsl:for-each>
          </tbody>
        </table>
        <table>
          <thead>
            <tr class="border">
              <td align="center" colspan="4">
                <h2>Drinks</h2>
              </td>
            </tr>
            <tr class="TableHead">
              <th rowspan="2">Name</th>
              <th colspan="3">Price</th>
            </tr>
            <tr>
              <th>Small</th>
              <th>Medium</th>
              <th>Large</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td colspan="4">Alcohol</td>
            </tr>
            <xsl:for-each select="Item">
              <xsl:if test="@Category='Drink'and @MenuCategorie = 'Alcohol'">
                <tr>
                  <td class="exept">
                    <xsl:value-of select="ItemName"/><br/>
                    Description:<xsl:value-of select="Description"/>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Small'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Medium'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Large'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                </tr>
              </xsl:if>
            </xsl:for-each>
            <tr>
              <td colspan="4">Non-Alcohol</td>
            </tr>
            <xsl:for-each select="Item">
              <xsl:if test="@Category='Drink'and @MenuCategorie != 'Alcohol'">
                <tr>
                  <td class="exept">
                    <xsl:value-of select="ItemName"/><br/>
                    Description:<xsl:value-of select="Description"/>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Small'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Medium'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                  <td>
                    <xsl:for-each select="Portions/Portion">
                      <xsl:if test="@PortionType = 'Large'">
                        <xsl:value-of select="PortionPrice"/>
                        <xsl:value-of select="PortionPrice/@Currency"/>
                      </xsl:if>
                    </xsl:for-each>
                  </td>
                </tr>
              </xsl:if>
            </xsl:for-each>
          </tbody>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

XSLT XML

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/Menu">
    <Menu>
      <xsl:for-each select="Item">
        <Item>
          <ItemName>
            <xsl:value-of select="ItemName"/>
          </ItemName>
          <Description>
            <xsl:value-of select="Description"/>
          </Description>
          <IntoleranceFreeFood>
            <xsl:for-each select="IntoleranceFreeFood/IntoleranceFree">
              <IntoleranceFree>
                <xsl:value-of select="."/>
              </IntoleranceFree>
            </xsl:for-each>
          </IntoleranceFreeFood>
          <Portions>
            <Portion>
              <xsl:for-each select="Portions/Portion">
                <PortionPrice>
                  <xsl:value-of select="PortionPrice"/>
                  <xsl:value-of select="PortionPrice/@Currency"/>
                </PortionPrice>
                <PortionSize>
                  <xsl:for-each select="PortionSize/Size">
                    <Size>
                      <xsl:value-of select="."/>
                      <xsl:value-of select="./@Units"/>
                    </Size>
                  </xsl:for-each>
                </PortionSize>
              </xsl:for-each>
            </Portion>
          </Portions>
          <Ingredients>
            <xsl:for-each select="Ingredients/Ingredient">
              <Ingredient>
                <xsl:value-of select="."/>
                <xsl:value-of select="./@Quantity"/>
                <xsl:value-of select="./@Units"/>
              </Ingredient>
            </xsl:for-each>
          </Ingredients>
        </Item>
      </xsl:for-each>
    </Menu>
  </xsl:template>
</xsl:stylesheet>