BeerXML is an open data standard used to exchange recipes and related beer brewing information. There are websites and mobile apps that support the standard. There are development packages available for a variety of software platforms and programming languages. It’s used by professionals to automate processes, and by hobbyists to share favorites. In short, it’s easy to find and/or create recipes in BeerXML format .
Displaying recipes within WordPress, then, is simply a matter of creating an XSL stylesheet to read and transform recipes from XML to HTML. The sample stylesheet here – beer.xsl – reads the input file, and creates a framework for detailed customization of the output later. For reference, required nodes are starred (eg, *NAME); optional nodes are omitted if empty; and display-only, extension nodes are prefixed with plus marks (eg, +DISPLAY_AMOUNT).
Note the use of <xsl:call-template name="util-super-global"> at the top of beer.xsl. A single XML data file can contain multiple recipes, so we are using the util-super-global template from plugins/xslt-processor/xsl/util.xsl to check PHP’s global _REQUEST array for the requested recipe number (eg, ?recipe=2). That allows switching between the recipes.
Version 1
[xslt_transform_xml xsl="case-study-beer/beer.xsl" xml="case-study-beer/four-recipes.xml" /]
Output v1:
Dry Stout
| *NAME |
Dry Stout (Irish) |
| *VERSION |
1 |
| *CATEGORY |
Stout |
| *CATEGORY_NUMBER |
1 |
| *STYLE_LETTER |
A |
| *STYLE_GUIDE |
BJCP 1999 |
| *TYPE |
Ale |
| *OG_MIN |
1.03600000 |
| *OG_MAX |
1.05000000 |
| *FG_MIN |
1.00700000 |
| *FG_MAX |
1.01200000 |
| *IBU_MIN |
30.0 |
| *IBU_MAX |
50.0 |
| *COLOR_MIN |
35.00000000 |
| *COLOR_MAX |
200.00000000 |
| CARB_MIN |
1.6 |
| CARB_MAX |
2.1> |
| ABV_MIN |
3.0 |
| ABV_MAX |
5.5 |
| PROFILE |
Full body perception from Flaked Barley, thought starting gravity may be low. Dry roasted flavor. Generous hops, though malt flavor will dominate. Complex fruity flavor. Black opaque color. |
| INGREDIENTS |
English malt. Roasted Barley and Flaked Barley for all grain. Some chocolate or black patent used in extract recipes. Goldings or Fuggles hops. Low sulfate, high calcium water. |
| EXAMPLES |
Guiness Stout |
| NOTES |
Famous Irish Stout (AKA Guiness). Dry roasted almost coffee like flavor. Irish versions have low starting gravity. Often mixed with soured, pasturized beer to give a slight acidity as well. |
| +DISPLAY_OG_MIN |
1.036 SG |
| +DISPLAY_OG_MAX |
1.050 SG |
| +DISPLAY_FG_MIN |
1.007 SG |
| +DISPLAY_FG_MAX |
1.012 SG |
| +DISPLAY_COLOR_MIN |
35.0 SRM |
| +DISPLAY_COLOR_MAX |
200.0 SRM |
| +OG_RANGE |
1.036-1.050 SG |
| +FG_RANGE |
1.007-1.012 SG |
| +IBU_RANGE |
30.0-50.0 IBU |
| +CARB_RANGE |
1.6-2.1 vols |
| +COLOR_RANGE |
35.0-200.0 SRM |
| +ABV_RANGE |
3.0-5.5 % |
| *NAME |
Brew Pot (6+gal) and Igloo/Gott Cooler (5 Gal) |
| *VERSION |
1 |
| *BOIL_SIZE |
22.70566900 |
| *BATCH_SIZE |
18.927168 |
| TUN_VOLUME |
18.92716800 |
| TUN_WEIGHT |
1.814368 |
| TUN_SPECIFIC_HEAT |
0.300 |
| TOP_UP_WATER |
0.00000000 |
| TRUB_CHILLER_LOSS |
0.94635800 |
| EVAP_RATE |
9.0 |
| BOIL_TIME |
60.0 |
| CALC_BOIL_VOLUME |
FALSE |
| LAUTER_DEADSPACE |
0.94635800 |
| TOP_UP_KETTLE |
0.00000000 |
| HOP_UTILIZATION |
100.0 |
| NOTES |
Popular all grain setup. 5 Gallon Gott or Igloo cooler as mash tun with false bottom, and 7-9 gallon brewpot capable of boiling at least 6 gallons of wort. Primarily used for single infusion mashes. |
| +DISPLAY_BOIL_SIZE |
6.00 gal |
| +DISPLAY_BATCH_SIZE |
5.00 gal |
| +DISPLAY_TUN_VOLUME |
5.00 gal |
| +DISPLAY_TUN_WEIGHT |
4.00 lb |
| +DISPLAY_TOP_UP_WATER |
0.00 gal |
| +DISPLAY_TRUB_CHILLER_LOSS |
0.25 gal |
| +DISPLAY_LAUTER_DEADSPACE |
0.25 gal |
| +DISPLAY_TOP_UP_KETTLE |
0.00 gal |
HOP 1
| *NAME |
Goldings, East Kent |
| *VERSION |
1 |
| *ALPHA |
5.00 |
| *AMOUNT |
0.0637860 |
| *USE |
Boil |
| *TIME |
60.000 |
| TYPE |
Aroma |
| FORM |
Pellet |
| BETA |
3.50 |
| HSI |
35.0 |
| ORIGIN |
United Kingdom |
| NOTES |
Used For: General purpose hops for bittering/finishing all British Ales Aroma: Floral, aromatic, earthy, slightly sweet spicy flavor Substitutes: Fuggles, BC Goldings Examples: Bass Pale Ale, Fullers ESB, Samual Smith’s Pale Ale |
| +DISPLAY_AMOUNT |
2.25 oz |
| +INVENTORY |
2.25 oz |
| +DISPLAY_TIME |
60 min |
FERMENTABLE 1
| *NAME |
Pale Malt (2 Row) UK |
| *VERSION |
1 |
| *TYPE |
Grain |
| *AMOUNT |
2.267960 |
| *YIELD |
78.0 |
| COLOR |
2.5 |
| ADD_AFTER_BOIL |
FALSE |
| ORIGIN |
United Kingdom |
| COARSE_FINE_DIFF |
1.5 |
| MOISTURE |
4.0 |
| DIASTATIC_POWER |
45.0 |
| PROTEIN |
10.1 |
| MAX_IN_BATCH |
100.0 |
| RECOMMEND_MASH |
FALSE |
| IBU_GAL_PER_LB |
0.000 |
| NOTES |
Base malt for all English beer styles Lower diastatic power than American 2 Row Pale Malt |
| +DISPLAY_AMOUNT |
5.00 lb |
| +POTENTIAL |
1.036 |
| +INVENTORY |
5.00 lb |
| +DISPLAY_COLOR |
2.5 SRM |
FERMENTABLE 2
| *NAME |
Barley, Flaked |
| *VERSION |
1 |
| *TYPE |
Grain |
| *AMOUNT |
0.907184 |
| *YIELD |
70.0 |
| COLOR |
1.7 |
| ADD_AFTER_BOIL |
FALSE |
| ORIGIN |
US |
| COARSE_FINE_DIFF |
1.5 |
| MOISTURE |
9.0 |
| DIASTATIC_POWER |
0.0 |
| PROTEIN |
13.5 |
| MAX_IN_BATCH |
20.0 |
| RECOMMEND_MASH |
TRUE |
| IBU_GAL_PER_LB |
0.000 |
| NOTES |
Adds significant body to Porters and Stouts. High haze producing protein prevents use in light beers. |
| +DISPLAY_AMOUNT |
2.00 lb |
| +POTENTIAL |
1.032 |
| +INVENTORY |
2.00 lb |
| +DISPLAY_COLOR |
1.7 SRM |
FERMENTABLE 3
| *NAME |
Black Barley (Stout) |
| *VERSION |
1 |
| *TYPE |
Grain |
| *AMOUNT |
0.453592 |
| *YIELD |
55.0 |
| COLOR |
500.0 |
| ADD_AFTER_BOIL |
FALSE |
| ORIGIN |
US |
| COARSE_FINE_DIFF |
1.5 |
| MOISTURE |
5.0 |
| DIASTATIC_POWER |
0.0 |
| PROTEIN |
13.2 |
| MAX_IN_BATCH |
10.0 |
| RECOMMEND_MASH |
FALSE |
| IBU_GAL_PER_LB |
0.000 |
| NOTES |
Unmalted barley roasted at high temperature to create a dry, coffee like flavor. Imparts a sharp acrid flavor characteristic of dry stouts. Gives “dryness” to a stout or porter — much more so than regular Roasted Barley |
| +DISPLAY_AMOUNT |
1.00 lb |
| +POTENTIAL |
1.025 |
| +INVENTORY |
1.00 lb |
| +DISPLAY_COLOR |
500.0 SRM |
MISC 1
| *NAME |
Irish Moss |
| *VERSION |
1 |
| *TYPE |
Fining |
| *USE |
Boil |
| *TIME |
10.000 |
| *AMOUNT |
0.001232 |
| AMOUNT_IS_WEIGHT |
FALSE |
| USE_FOR |
Clarity |
| NOTES |
Fining agent that aids in the post-boil protein break. Reduces protein chill haze and improves beer clarity. |
| +DISPLAY_AMOUNT |
0.25 tsp |
| +INVENTORY |
0.00 tsp |
| +DISPLAY_TIME |
10.0 min |
MISC 2
| *NAME |
Gypsum (Calcium Sulfate) |
| *VERSION |
1 |
| *TYPE |
Water Agent |
| *USE |
Mash |
| *TIME |
60.000 |
| *AMOUNT |
0.010000 |
| AMOUNT_IS_WEIGHT |
TRUE |
| USE_FOR |
Water Agent |
| NOTES |
Reduces PH of water for mashing and sparging. Alters water profile — used to harden soft water. Use the BeerSmith Water Profile tool to determine amount to add. |
| +DISPLAY_AMOUNT |
10.00 gm |
| +INVENTORY |
0.00 gm |
| +DISPLAY_TIME |
60.0 min |
YEAST 1
| *NAME |
Irish Ale |
| *VERSION |
1 |
| *TYPE |
Ale |
| *FORM |
Liquid |
| *AMOUNT |
0.1250480 |
| AMOUNT_IS_WEIGHT |
FALSE |
| LABORATORY |
Wyeast Labs |
| PRODUCT_ID |
1084 |
| MIN_TEMPERATURE |
16.6667 |
| MAX_TEMPERATURE |
22.2222 |
| FLOCCULATION |
Medium |
| ATTENUATION |
73.0 |
| BEST_FOR |
Irish Dry Stouts, Porter, Scottish Ale, Brown Ale, Imperial Stout, Barley Wine |
| TIMES_CULTURED |
0 |
| MAX_REUSE |
5 |
| ADD_TO_SECONDARY |
FALSE |
| NOTES |
Dry diacetyl, fruity flavor characteristic of stouts. Full bodied, dry, clean flavor. |
| +DISPLAY_AMOUNT |
125 ml |
| +DISP_MIN_TEMP |
62.0 F |
| +DISP_MAX_TEMP |
72.0 F |
| +INVENTORY |
0 Pkgs |
| +CULTURE_DATE |
7/6/2003 |
WATER 1
| *NAME |
Dublin, Ireland |
| *VERSION |
1 |
| *AMOUNT |
18.927168 |
| *CALCIUM |
115.0 |
| *BICARBONATE |
200.0 |
| *SULFATE |
55.0 |
| *CHLORIDE |
19.0 |
| *SODIUM |
12.0 |
| *MAGNESIUM |
4.0 |
| PH |
8.0 |
| NOTES |
Irish ale water – used for dark, malty strong ales with medium bitterness. Famous for dry stouts. |
| +DISPLAY_AMOUNT |
5.00 gal |
| *NAME |
Single Infusion, Medium Body |
| *VERSION |
1 |
| *GRAIN_TEMP |
22.22222200 |
| *MASH_STEPS |
Mash In
1
Infusion
9.463584
60
67.77777800
2
67.77777800
Add 10.00 qt of water at 165.9 F
1.25
0.00 qt
165.9 F
DISPLAY_STEP_TEMP
10.00 qt
Mash Out
1
Infusion
6.056694
10
75.55555600
2
75.55555600
Add 6.40 qt of water at 193.1 F
2.05
0.00 qt
193.1 F
DISPLAY_STEP_TEMP
6.40 qt
|
| TUN_TEMP |
22.22222200 |
| SPARGE_TEMP |
75.55555600 |
| PH |
5.4 |
| TUN_WEIGHT |
1.81436800 |
| TUN_SPECIFIC_HEAT |
0.30000000 |
| EQUIP_ADJUST |
FALSE |
| +DISPLAY_GRAIN_TEMP |
72.0 F |
| +DISPLAY_TUN_TEMP |
72.0 |
| +DISPLAY_SPARGE_TEMP |
168.0 F |
| +DISPLAY_TUN_WEIGHT |
4.00 lb |
MASH_STEPS (2)
MASH_STEP 1
| *NAME |
Mash In |
| *VERSION |
1 |
| *TYPE |
Infusion |
| *INFUSE_AMOUNT |
9.463584 |
| *STEP_TEMP |
67.77777800 |
| *STEP_TIME |
60 |
| RAMP_TIME |
2 |
| END_TEMP |
67.77777800 |
| +DESCRIPTION |
Add 10.00 qt of water at 165.9 F |
| +WATER_GRAIN_RATIO |
1.25 |
| +DECOCTION_AMT |
0.00 qt |
| +INFUSE_TEMP |
165.9 F |
| +DISPLAY_STEP_TEMP |
DISPLAY_STEP_TEMP |
| +DISPLAY_INFUSE_AMT |
10.00 qt |
MASH_STEP 2
| *NAME |
Mash Out |
| *VERSION |
1 |
| *TYPE |
Infusion |
| *INFUSE_AMOUNT |
6.056694 |
| *STEP_TEMP |
75.55555600 |
| *STEP_TIME |
10 |
| RAMP_TIME |
2 |
| END_TEMP |
75.55555600 |
| +DESCRIPTION |
Add 6.40 qt of water at 193.1 F |
| +WATER_GRAIN_RATIO |
2.05 |
| +DECOCTION_AMT |
0.00 qt |
| +INFUSE_TEMP |
193.1 F |
| +DISPLAY_STEP_TEMP |
DISPLAY_STEP_TEMP |
| +DISPLAY_INFUSE_AMT |
6.40 qt |
XSL file – “case-study-beer/beer.xsl”
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exslt="http://exslt.org/common" version="1.0" exclude-result-prefixes="exslt">
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:include href="../../plugins/tenandtwo-xslt-processor/xsl/util.xsl"/>
<!-- main -->
<xsl:template match="/">
<!-- get recipe number from $_REQUEST['recipe'] -->
<xsl:variable name="recipe_idx">
<xsl:call-template name="util-super-global">
<xsl:with-param name="global" select="'_REQUEST'"/>
<xsl:with-param name="index">recipe</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<!-- count recipes in the data -->
<xsl:variable name="recipe_max">
<xsl:value-of select="count(//RECIPE)"/>
</xsl:variable>
<!-- get final index of recipe to display -->
<xsl:variable name="selected">
<xsl:choose>
<xsl:when test="$recipe_idx > $recipe_max or $recipe_idx = 'last'">
<xsl:value-of select="$recipe_max"/>
</xsl:when>
<xsl:when test="$recipe_idx > 0">
<xsl:value-of select="$recipe_idx"/>
</xsl:when>
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- begin output -->
<xsl:apply-templates select="RECIPES">
<xsl:with-param name="selected" select="number($selected)"/>
</xsl:apply-templates>
</xsl:template>
<!-- RECIPES -->
<xsl:template match="RECIPES">
<xsl:param name="selected"/>
<!-- output links -->
<div id="beerxml-recipes">
<h3>RECIPES</h3>
<ol>
<xsl:apply-templates select="RECIPE" mode="index">
<xsl:with-param name="selected" select="$selected"/>
</xsl:apply-templates>
</ol>
</div>
<!-- output details -->
<xsl:apply-templates select="RECIPE[$selected]"/>
</xsl:template>
<!-- RECIPE -->
<xsl:template match="RECIPE" mode="index">
<xsl:param name="selected"/>
<li>
<xsl:choose>
<xsl:when test="position() = $selected">
<b>
<xsl:value-of disable-output-escaping="yes" select="NAME"/>
</b>
</xsl:when>
<xsl:otherwise>
<a>
<xsl:attribute name="href"><xsl:value-of select="concat('?recipe=',position())"/></xsl:attribute>
<xsl:value-of disable-output-escaping="yes" select="NAME"/>
</a>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:template>
<!-- RECIPE -->
<xsl:template match="RECIPE">
<div id="beerxml-recipe">
<h2><xsl:value-of disable-output-escaping="yes" select="NAME"/></h2>
<!--
<xsl:call-template name="RECIPE_HEADER" />
<xsl:apply-templates select="STYLE" />
<xsl:apply-templates select="EQUIPMENT" />
<xsl:apply-templates select="HOPS" />
<xsl:apply-templates select="FERMENTABLES" />
<xsl:apply-templates select="MISCS" />
<xsl:apply-templates select="YEASTS" />
<xsl:apply-templates select="WATERS" />
<xsl:apply-templates select="MASH" />
<xsl:call-template name="RECIPE_FOOTER" />
-->
<div class="accordion" id="beerxml-recipe-sections">
<div class="accordion-item">
<h2 class="accordion-header" id="section-label-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#section-body-header" aria-expanded="true" aria-controls="section-body-header">
<h4>RECIPE-HEADER</h4>
</button>
</h2>
<div id="section-body-header" class="accordion-collapse collapse show" aria-labelledby="section-label-header">
<div class="accordion-body">
<xsl:call-template name="RECIPE_HEADER"/>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="section-label-style">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#section-body-style" aria-expanded="false" aria-controls="section-body-style">
<h4>STYLE</h4>
</button>
</h2>
<div id="section-body-style" class="accordion-collapse collapse" aria-labelledby="section-label-style">
<div class="accordion-body">
<xsl:apply-templates select="STYLE"/>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="section-label-equipment">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#section-body-equipment" aria-expanded="false" aria-controls="section-body-equipment">
<h4>EQUIPMENT</h4>
</button>
</h2>
<div id="section-body-equipment" class="accordion-collapse collapse" aria-labelledby="section-label-equipment">
<div class="accordion-body">
<xsl:apply-templates select="EQUIPMENT"/>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="section-label-hops">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#section-body-hops" aria-expanded="false" aria-controls="section-body-hops">
<h4>HOPS (<xsl:value-of select="count(HOPS/HOP)"/>)</h4>
</button>
</h2>
<div id="section-body-hops" class="accordion-collapse collapse" aria-labelledby="section-label-hops">
<div class="accordion-body">
<xsl:apply-templates select="HOPS"/>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="section-label-fermentables">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#section-body-fermentables" aria-expanded="false" aria-controls="section-body-fermentables">
<h4>FERMENTABLES (<xsl:value-of select="count(FERMENTABLES/FERMENTABLE)"/>)</h4>
</button>
</h2>
<div id="section-body-fermentables" class="accordion-collapse collapse" aria-labelledby="section-label-fermentables">
<div class="accordion-body">
<xsl:apply-templates select="FERMENTABLES"/>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="section-label-miscs">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#section-body-miscs" aria-expanded="false" aria-controls="section-body-miscs">
<h4>MISCS (<xsl:value-of select="count(MISCS/MISC)"/>)</h4>
</button>
</h2>
<div id="section-body-miscs" class="accordion-collapse collapse" aria-labelledby="section-label-miscs">
<div class="accordion-body">
<xsl:apply-templates select="MISCS"/>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="section-label-yeasts">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#section-body-yeasts" aria-expanded="false" aria-controls="section-body-yeasts">
<h4>YEASTS (<xsl:value-of select="count(YEASTS/YEAST)"/>)</h4>
</button>
</h2>
<div id="section-body-yeasts" class="accordion-collapse collapse" aria-labelledby="section-label-yeasts">
<div class="accordion-body">
<xsl:apply-templates select="YEASTS"/>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="section-label-waters">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#section-body-waters" aria-expanded="false" aria-controls="section-body-waters">
<h4>WATERS (<xsl:value-of select="count(WATERS/WATER)"/>)</h4>
</button>
</h2>
<div id="section-body-waters" class="accordion-collapse collapse" aria-labelledby="section-label-waters">
<div class="accordion-body">
<xsl:apply-templates select="WATERS"/>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="section-label-mash">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#section-body-mash" aria-expanded="false" aria-controls="section-body-mash">
<h4>MASH</h4>
</button>
</h2>
<div id="section-body-mash" class="accordion-collapse collapse" aria-labelledby="section-label-mash">
<div class="accordion-body">
<xsl:apply-templates select="MASH"/>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header" id="section-label-footer">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#section-body-footer" aria-expanded="false" aria-controls="section-body-footer">
<h4>RECIPE_FOOTER</h4>
</button>
</h2>
<div id="section-body-footer" class="accordion-collapse collapse" aria-labelledby="section-label-footer">
<div class="accordion-body">
<xsl:call-template name="RECIPE_FOOTER"/>
</div>
</div>
</div>
</div> <!-- end class="accordion" -->
</div> <!-- end id="beerxml-recipe" -->
</xsl:template>
<!-- -->
<xsl:template name="RECIPE_HEADER">
<div id="beerxml-recipe-header">
<!-- <h4>RECIPE-HEADER</h4> -->
<table class="table table-sm table-bordered">
<tr><td class="text-end">*NAME</td><td><xsl:value-of disable-output-escaping="yes" select="NAME"/></td></tr>
<tr><td class="text-end">*VERSION</td><td><xsl:value-of disable-output-escaping="yes" select="VERSION"/></td></tr>
<tr><td class="text-end">*TYPE</td><td><xsl:value-of disable-output-escaping="yes" select="TYPE"/></td></tr>
<tr><td class="text-end">*BREWER</td><td><xsl:value-of disable-output-escaping="yes" select="BREWER"/></td></tr>
<xsl:if test="string-length(ASST_BREWER)">
<tr><td class="text-end">ASST_BREWER</td><td><xsl:value-of disable-output-escaping="yes" select="ASST_BREWER"/></td></tr>
</xsl:if>
<tr><td class="text-end">*BATCH_SIZE</td><td><xsl:value-of disable-output-escaping="yes" select="BATCH_SIZE"/></td></tr>
<tr><td class="text-end">*BOIL_SIZE</td><td><xsl:value-of disable-output-escaping="yes" select="BOIL_SIZE"/></td></tr>
<tr><td class="text-end">*BOIL_TIME</td><td><xsl:value-of disable-output-escaping="yes" select="BOIL_TIME"/></td></tr>
<tr><td class="text-end">*EFFICIENCY</td><td><xsl:value-of disable-output-escaping="yes" select="EFFICIENCY"/></td></tr>
<xsl:if test="string-length(DATE)">
<tr><td class="text-end">DATE</td><td><xsl:value-of disable-output-escaping="yes" select="DATE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(NOTES)">
<tr><td class="text-end">NOTES</td><td><xsl:value-of disable-output-escaping="yes" select="NOTES"/></td></tr>
</xsl:if>
</table>
</div>
</xsl:template>
<!-- -->
<xsl:template name="RECIPE_FOOTER">
<div id="beerxml-recipe-footer">
<!-- <h4>RECIPE_FOOTER</h4> -->
<table class="table table-sm table-bordered">
<xsl:if test="string-length(OG)">
<tr><td class="text-end">OG</td><td><xsl:value-of disable-output-escaping="yes" select="OG"/></td></tr>
</xsl:if>
<xsl:if test="string-length(FG)">
<tr><td class="text-end">FG</td><td><xsl:value-of disable-output-escaping="yes" select="FG"/></td></tr>
</xsl:if>
<xsl:if test="string-length(FERMENTATION_STAGES)">
<tr><td class="text-end">FERMENTATION_STAGES</td><td><xsl:value-of disable-output-escaping="yes" select="FERMENTATION_STAGES"/></td></tr>
</xsl:if>
<xsl:if test="string-length(PRIMARY_AGE)">
<tr><td class="text-end">PRIMARY_AGE</td><td><xsl:value-of disable-output-escaping="yes" select="PRIMARY_AGE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(PRIMARY_TEMP)">
<tr><td class="text-end">PRIMARY_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="PRIMARY_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(SECONDARY_AGE)">
<tr><td class="text-end">SECONDARY_AGE</td><td><xsl:value-of disable-output-escaping="yes" select="SECONDARY_AGE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(SECONDARY_TEMP)">
<tr><td class="text-end">SECONDARY_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="SECONDARY_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(TERTIARY_AGE)">
<tr><td class="text-end">TERTIARY_AGE</td><td><xsl:value-of disable-output-escaping="yes" select="TERTIARY_AGE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(TERTIARY_TEMP)">
<tr><td class="text-end">TERTIARY_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="TERTIARY_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(AGE)">
<tr><td class="text-end">AGE</td><td><xsl:value-of disable-output-escaping="yes" select="AGE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(AGE_TEMP)">
<tr><td class="text-end">AGE_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="AGE_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(CARBONATION)">
<tr><td class="text-end">CARBONATION</td><td><xsl:value-of disable-output-escaping="yes" select="CARBONATION"/></td></tr>
</xsl:if>
<xsl:if test="string-length(FORCED_CARBONATION)">
<tr><td class="text-end">FORCED_CARBONATION</td><td><xsl:value-of disable-output-escaping="yes" select="FORCED_CARBONATION"/></td></tr>
</xsl:if>
<xsl:if test="string-length(PRIMING_SUGAR_NAME)">
<tr><td class="text-end">PRIMING_SUGAR_NAME</td><td><xsl:value-of disable-output-escaping="yes" select="PRIMING_SUGAR_NAME"/></td></tr>
</xsl:if>
<xsl:if test="string-length(CARBONATION_TEMP)">
<tr><td class="text-end">CARBONATION_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="CARBONATION_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(PRIMING_SUGAR_EQUIV)">
<tr><td class="text-end">PRIMING_SUGAR_EQUIV</td><td><xsl:value-of disable-output-escaping="yes" select="PRIMING_SUGAR_EQUIV"/></td></tr>
</xsl:if>
<xsl:if test="string-length(KEG_PRIMING_FACTOR)">
<tr><td class="text-end">KEG_PRIMING_FACTOR</td><td><xsl:value-of disable-output-escaping="yes" select="KEG_PRIMING_FACTOR"/></td></tr>
</xsl:if>
<xsl:if test="string-length(TASTE_RATING)">
<tr><td class="text-end">TASTE_RATING</td><td><xsl:value-of disable-output-escaping="yes" select="TASTE_RATING"/></td></tr>
</xsl:if>
<xsl:if test="string-length(TASTE_NOTES)">
<tr><td class="text-end">TASTE_NOTES</td><td><xsl:value-of disable-output-escaping="yes" select="TASTE_NOTES"/></td></tr>
</xsl:if>
<xsl:if test="string-length(EST_OG)">
<tr><td class="text-end">+EST_OG</td><td><xsl:value-of disable-output-escaping="yes" select="EST_OG"/></td></tr>
</xsl:if>
<xsl:if test="string-length(EST_FG)">
<tr><td class="text-end">+EST_FG</td><td><xsl:value-of disable-output-escaping="yes" select="EST_FG"/></td></tr>
</xsl:if>
<xsl:if test="string-length(EST_COLOR)">
<tr><td class="text-end">+EST_COLOR</td><td><xsl:value-of disable-output-escaping="yes" select="EST_COLOR"/></td></tr>
</xsl:if>
<xsl:if test="string-length(IBU)">
<tr><td class="text-end">+IBU</td><td><xsl:value-of disable-output-escaping="yes" select="IBU"/></td></tr>
</xsl:if>
<xsl:if test="string-length(IBU_METHOD)">
<tr><td class="text-end">+IBU_METHOD</td><td><xsl:value-of disable-output-escaping="yes" select="IBU_METHOD"/></td></tr>
</xsl:if>
<xsl:if test="string-length(EST_ABV)">
<tr><td class="text-end">+EST_ABV</td><td><xsl:value-of disable-output-escaping="yes" select="EST_ABV"/></td></tr>
</xsl:if>
<xsl:if test="string-length(ABV)">
<tr><td class="text-end">+ABV</td><td><xsl:value-of disable-output-escaping="yes" select="ABV"/></td></tr>
</xsl:if>
<xsl:if test="string-length(ACTUAL_EFFICIENCY)">
<tr><td class="text-end">+ACTUAL_EFFICIENCY</td><td><xsl:value-of disable-output-escaping="yes" select="ACTUAL_EFFICIENCY"/></td></tr>
</xsl:if>
<xsl:if test="string-length(CALORIES)">
<tr><td class="text-end">+CALORIES</td><td><xsl:value-of disable-output-escaping="yes" select="CALORIES"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_BATCH_SIZE)">
<tr><td class="text-end">+DISPLAY_BATCH_SIZE</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_BATCH_SIZE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_BOIL_SIZE)">
<tr><td class="text-end">+DISPLAY_BOIL_SIZE</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_BOIL_SIZE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_OG)">
<tr><td class="text-end">+DISPLAY_OG</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_OG"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_FG)">
<tr><td class="text-end">+DISPLAY_FG</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_FG"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_PRIMARY_TEMP)">
<tr><td class="text-end">+DISPLAY_PRIMARY_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_PRIMARY_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_SECONDARY_TEMP)">
<tr><td class="text-end">+DISPLAY_SECONDARY_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_SECONDARY_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_TERTIARY_TEMP)">
<tr><td class="text-end">+DISPLAY_TERTIARY_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_TERTIARY_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_AGE_TEMP)">
<tr><td class="text-end">+DISPLAY_AGE_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_AGE_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(CARBONATION_USED)">
<tr><td class="text-end">+CARBONATION_USED</td><td><xsl:value-of disable-output-escaping="yes" select="CARBONATION_USED"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_CARB_TEMP)">
<tr><td class="text-end">+DISPLAY_CARB_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_CARB_TEMP"/></td></tr>
</xsl:if>
</table>
</div>
</xsl:template>
<!-- STYLE -->
<xsl:template match="STYLE">
<div id="beerxml-style">
<!-- <h4>STYLE</h4> -->
<table class="table table-sm table-bordered">
<tr><td class="text-end">*NAME</td><td><xsl:value-of disable-output-escaping="yes" select="NAME"/></td></tr>
<tr><td class="text-end">*VERSION</td><td><xsl:value-of disable-output-escaping="yes" select="VERSION"/></td></tr>
<tr><td class="text-end">*CATEGORY</td><td><xsl:value-of disable-output-escaping="yes" select="CATEGORY"/></td></tr>
<tr><td class="text-end">*CATEGORY_NUMBER</td><td><xsl:value-of disable-output-escaping="yes" select="CATEGORY_NUMBER"/></td></tr>
<tr><td class="text-end">*STYLE_LETTER</td><td><xsl:value-of disable-output-escaping="yes" select="STYLE_LETTER"/></td></tr>
<tr><td class="text-end">*STYLE_GUIDE</td><td><xsl:value-of disable-output-escaping="yes" select="STYLE_GUIDE"/></td></tr>
<tr><td class="text-end">*TYPE</td><td><xsl:value-of disable-output-escaping="yes" select="TYPE"/></td></tr>
<tr><td class="text-end">*OG_MIN</td><td><xsl:value-of disable-output-escaping="yes" select="OG_MIN"/></td></tr>
<tr><td class="text-end">*OG_MAX</td><td><xsl:value-of disable-output-escaping="yes" select="OG_MAX"/></td></tr>
<tr><td class="text-end">*FG_MIN</td><td><xsl:value-of disable-output-escaping="yes" select="FG_MIN"/></td></tr>
<tr><td class="text-end">*FG_MAX</td><td><xsl:value-of disable-output-escaping="yes" select="FG_MAX"/></td></tr>
<tr><td class="text-end">*IBU_MIN</td><td><xsl:value-of disable-output-escaping="yes" select="IBU_MIN"/></td></tr>
<tr><td class="text-end">*IBU_MAX</td><td><xsl:value-of disable-output-escaping="yes" select="IBU_MAX"/></td></tr>
<tr><td class="text-end">*COLOR_MIN</td><td><xsl:value-of disable-output-escaping="yes" select="COLOR_MIN"/></td></tr>
<tr><td class="text-end">*COLOR_MAX</td><td><xsl:value-of disable-output-escaping="yes" select="COLOR_MAX"/></td></tr>
<xsl:if test="string-length(CARB_MIN)">
<tr><td class="text-end">CARB_MIN</td><td><xsl:value-of disable-output-escaping="yes" select="CARB_MIN"/></td></tr>
</xsl:if>
<xsl:if test="string-length(CARB_MAX)">
<tr><td class="text-end">CARB_MAX</td><td><xsl:value-of disable-output-escaping="yes" select="CARB_MAX"/></td></tr>
</xsl:if>
<xsl:if test="string-length(ABV_MIN)">
<tr><td class="text-end">ABV_MIN</td><td><xsl:value-of disable-output-escaping="yes" select="ABV_MIN"/></td></tr>
</xsl:if>
<xsl:if test="string-length(ABV_MAX)">
<tr><td class="text-end">ABV_MAX</td><td><xsl:value-of disable-output-escaping="yes" select="ABV_MAX"/></td></tr>
</xsl:if>
<xsl:if test="string-length(PROFILE)">
<tr><td class="text-end">PROFILE</td><td><xsl:value-of disable-output-escaping="yes" select="PROFILE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(INGREDIENTS)">
<tr><td class="text-end">INGREDIENTS</td><td><xsl:value-of disable-output-escaping="yes" select="INGREDIENTS"/></td></tr>
</xsl:if>
<xsl:if test="string-length(EXAMPLES)">
<tr><td class="text-end">EXAMPLES</td><td><xsl:value-of disable-output-escaping="yes" select="EXAMPLES"/></td></tr>
</xsl:if>
<xsl:if test="string-length(NOTES)">
<tr><td class="text-end">NOTES</td><td><xsl:value-of disable-output-escaping="yes" select="NOTES"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_OG_MIN)">
<tr><td class="text-end">+DISPLAY_OG_MIN</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_OG_MIN"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_OG_MAX)">
<tr><td class="text-end">+DISPLAY_OG_MAX</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_OG_MAX"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_FG_MIN)">
<tr><td class="text-end">+DISPLAY_FG_MIN</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_FG_MIN"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_FG_MAX)">
<tr><td class="text-end">+DISPLAY_FG_MAX</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_FG_MAX"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_COLOR_MIN)">
<tr><td class="text-end">+DISPLAY_COLOR_MIN</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_COLOR_MIN"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_COLOR_MAX)">
<tr><td class="text-end">+DISPLAY_COLOR_MAX</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_COLOR_MAX"/></td></tr>
</xsl:if>
<xsl:if test="string-length(OG_RANGE)">
<tr><td class="text-end">+OG_RANGE</td><td><xsl:value-of disable-output-escaping="yes" select="OG_RANGE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(FG_RANGE)">
<tr><td class="text-end">+FG_RANGE</td><td><xsl:value-of disable-output-escaping="yes" select="FG_RANGE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(IBU_RANGE)">
<tr><td class="text-end">+IBU_RANGE</td><td><xsl:value-of disable-output-escaping="yes" select="IBU_RANGE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(CARB_RANGE)">
<tr><td class="text-end">+CARB_RANGE</td><td><xsl:value-of disable-output-escaping="yes" select="CARB_RANGE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(COLOR_RANGE)">
<tr><td class="text-end">+COLOR_RANGE</td><td><xsl:value-of disable-output-escaping="yes" select="COLOR_RANGE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(ABV_RANGE)">
<tr><td class="text-end">+ABV_RANGE</td><td><xsl:value-of disable-output-escaping="yes" select="ABV_RANGE"/></td></tr>
</xsl:if>
</table>
</div>
</xsl:template>
<!-- EQUIPMENT -->
<xsl:template match="EQUIPMENT">
<div id="beerxml-equipment">
<!-- <h4>EQUIPMENT</h4> -->
<table class="table table-sm table-bordered">
<tr><td class="text-end">*NAME</td><td><xsl:value-of disable-output-escaping="yes" select="NAME"/></td></tr>
<tr><td class="text-end">*VERSION</td><td><xsl:value-of disable-output-escaping="yes" select="VERSION"/></td></tr>
<tr><td class="text-end">*BOIL_SIZE</td><td><xsl:value-of disable-output-escaping="yes" select="BOIL_SIZE"/></td></tr>
<tr><td class="text-end">*BATCH_SIZE</td><td><xsl:value-of disable-output-escaping="yes" select="BATCH_SIZE"/></td></tr>
<xsl:if test="string-length(TUN_VOLUME)">
<tr><td class="text-end">TUN_VOLUME</td><td><xsl:value-of disable-output-escaping="yes" select="TUN_VOLUME"/></td></tr>
</xsl:if>
<xsl:if test="string-length(TUN_WEIGHT)">
<tr><td class="text-end">TUN_WEIGHT</td><td><xsl:value-of disable-output-escaping="yes" select="TUN_WEIGHT"/></td></tr>
</xsl:if>
<xsl:if test="string-length(TUN_SPECIFIC_HEAT)">
<tr><td class="text-end">TUN_SPECIFIC_HEAT</td><td><xsl:value-of disable-output-escaping="yes" select="TUN_SPECIFIC_HEAT"/></td></tr>
</xsl:if>
<xsl:if test="string-length(TOP_UP_WATER)">
<tr><td class="text-end">TOP_UP_WATER</td><td><xsl:value-of disable-output-escaping="yes" select="TOP_UP_WATER"/></td></tr>
</xsl:if>
<xsl:if test="string-length(TRUB_CHILLER_LOSS)">
<tr><td class="text-end">TRUB_CHILLER_LOSS</td><td><xsl:value-of disable-output-escaping="yes" select="TRUB_CHILLER_LOSS"/></td></tr>
</xsl:if>
<xsl:if test="string-length(EVAP_RATE)">
<tr><td class="text-end">EVAP_RATE</td><td><xsl:value-of disable-output-escaping="yes" select="EVAP_RATE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(BOIL_TIME)">
<tr><td class="text-end">BOIL_TIME</td><td><xsl:value-of disable-output-escaping="yes" select="BOIL_TIME"/></td></tr>
</xsl:if>
<xsl:if test="string-length(CALC_BOIL_VOLUME)">
<tr><td class="text-end">CALC_BOIL_VOLUME</td><td><xsl:value-of disable-output-escaping="yes" select="CALC_BOIL_VOLUME"/></td></tr>
</xsl:if>
<xsl:if test="string-length(LAUTER_DEADSPACE)">
<tr><td class="text-end">LAUTER_DEADSPACE</td><td><xsl:value-of disable-output-escaping="yes" select="LAUTER_DEADSPACE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(TOP_UP_KETTLE)">
<tr><td class="text-end">TOP_UP_KETTLE</td><td><xsl:value-of disable-output-escaping="yes" select="TOP_UP_KETTLE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(HOP_UTILIZATION)">
<tr><td class="text-end">HOP_UTILIZATION</td><td><xsl:value-of disable-output-escaping="yes" select="HOP_UTILIZATION"/></td></tr>
</xsl:if>
<xsl:if test="string-length(NOTES)">
<tr><td class="text-end">NOTES</td><td><xsl:value-of disable-output-escaping="yes" select="NOTES"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_BOIL_SIZE)">
<tr><td class="text-end">+DISPLAY_BOIL_SIZE</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_BOIL_SIZE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_BATCH_SIZE)">
<tr><td class="text-end">+DISPLAY_BATCH_SIZE</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_BATCH_SIZE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_TUN_VOLUME)">
<tr><td class="text-end">+DISPLAY_TUN_VOLUME</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_TUN_VOLUME"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_TUN_WEIGHT)">
<tr><td class="text-end">+DISPLAY_TUN_WEIGHT</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_TUN_WEIGHT"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_TOP_UP_WATER)">
<tr><td class="text-end">+DISPLAY_TOP_UP_WATER</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_TOP_UP_WATER"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_TRUB_CHILLER_LOSS)">
<tr><td class="text-end">+DISPLAY_TRUB_CHILLER_LOSS</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_TRUB_CHILLER_LOSS"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_LAUTER_DEADSPACE)">
<tr><td class="text-end">+DISPLAY_LAUTER_DEADSPACE</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_LAUTER_DEADSPACE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_TOP_UP_KETTLE)">
<tr><td class="text-end">+DISPLAY_TOP_UP_KETTLE</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_TOP_UP_KETTLE"/></td></tr>
</xsl:if>
</table>
</div>
</xsl:template>
<!-- HOPS -->
<xsl:template match="HOPS">
<div id="beerxml-hops">
<!-- <h4>HOPS (<xsl:value-of select="count(HOP)" />)</h4> -->
<xsl:apply-templates select="HOP"/>
</div>
</xsl:template>
<!-- HOPS/HOP -->
<xsl:template match="HOP">
<div id="beerxml-hop">
<h5>HOP <xsl:value-of select="position()"/></h5>
<table class="table table-sm table-bordered">
<tr><td class="text-end">*NAME</td><td><xsl:value-of disable-output-escaping="yes" select="NAME"/></td></tr>
<tr><td class="text-end">*VERSION</td><td><xsl:value-of disable-output-escaping="yes" select="VERSION"/></td></tr>
<tr><td class="text-end">*ALPHA</td><td><xsl:value-of disable-output-escaping="yes" select="ALPHA"/></td></tr>
<tr><td class="text-end">*AMOUNT</td><td><xsl:value-of disable-output-escaping="yes" select="AMOUNT"/></td></tr>
<tr><td class="text-end">*USE</td><td><xsl:value-of disable-output-escaping="yes" select="USE"/></td></tr>
<tr><td class="text-end">*TIME</td><td><xsl:value-of disable-output-escaping="yes" select="TIME"/></td></tr>
<xsl:if test="string-length(TYPE)">
<tr><td class="text-end">TYPE</td><td><xsl:value-of disable-output-escaping="yes" select="TYPE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(FORM)">
<tr><td class="text-end">FORM</td><td><xsl:value-of disable-output-escaping="yes" select="FORM"/></td></tr>
</xsl:if>
<xsl:if test="string-length(BETA)">
<tr><td class="text-end">BETA</td><td><xsl:value-of disable-output-escaping="yes" select="BETA"/></td></tr>
</xsl:if>
<xsl:if test="string-length(HSI)">
<tr><td class="text-end">HSI</td><td><xsl:value-of disable-output-escaping="yes" select="HSI"/></td></tr>
</xsl:if>
<xsl:if test="string-length(ORIGIN)">
<tr><td class="text-end">ORIGIN</td><td><xsl:value-of disable-output-escaping="yes" select="ORIGIN"/></td></tr>
</xsl:if>
<xsl:if test="string-length(SUBSTITUTES)">
<tr><td class="text-end">SUBSTITUTES</td><td><xsl:value-of disable-output-escaping="yes" select="SUBSTITUTES"/></td></tr>
</xsl:if>
<xsl:if test="string-length(HUMULENE)">
<tr><td class="text-end">HUMULENE</td><td><xsl:value-of disable-output-escaping="yes" select="HUMULENE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(CARYOPHYLLENE)">
<tr><td class="text-end">CARYOPHYLLENE</td><td><xsl:value-of disable-output-escaping="yes" select="CARYOPHYLLENE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(COHUMULONE)">
<tr><td class="text-end">COHUMULONE</td><td><xsl:value-of disable-output-escaping="yes" select="COHUMULONE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(MYRCENE)">
<tr><td class="text-end">MYRCENE</td><td><xsl:value-of disable-output-escaping="yes" select="MYRCENE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(NOTES)">
<tr><td class="text-end">NOTES</td><td><xsl:value-of disable-output-escaping="yes" select="NOTES"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_AMOUNT)">
<tr><td class="text-end">+DISPLAY_AMOUNT</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_AMOUNT"/></td></tr>
</xsl:if>
<xsl:if test="string-length(INVENTORY)">
<tr><td class="text-end">+INVENTORY</td><td><xsl:value-of disable-output-escaping="yes" select="INVENTORY"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_TIME)">
<tr><td class="text-end">+DISPLAY_TIME</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_TIME"/></td></tr>
</xsl:if>
</table>
</div>
</xsl:template>
<!-- FERMENTABLES -->
<xsl:template match="FERMENTABLES">
<div id="beerxml-fermentables">
<!-- <h4>FERMENTABLES (<xsl:value-of select="count(FERMENTABLE)" />)</h4> -->
<xsl:apply-templates select="FERMENTABLE"/>
</div>
</xsl:template>
<!-- FERMENTABLES/FERMENTABLE -->
<xsl:template match="FERMENTABLE">
<div id="beerxml-fermentable">
<h5>FERMENTABLE <xsl:value-of select="position()"/></h5>
<table class="table table-sm table-bordered">
<tr><td class="text-end">*NAME</td><td><xsl:value-of disable-output-escaping="yes" select="NAME"/></td></tr>
<tr><td class="text-end">*VERSION</td><td><xsl:value-of disable-output-escaping="yes" select="VERSION"/></td></tr>
<tr><td class="text-end">*TYPE</td><td><xsl:value-of disable-output-escaping="yes" select="TYPE"/></td></tr>
<tr><td class="text-end">*AMOUNT</td><td><xsl:value-of disable-output-escaping="yes" select="AMOUNT"/></td></tr>
<tr><td class="text-end">*YIELD</td><td><xsl:value-of disable-output-escaping="yes" select="YIELD"/></td></tr>
<xsl:if test="string-length(COLOR)">
<tr><td class="text-end">COLOR</td><td><xsl:value-of disable-output-escaping="yes" select="COLOR"/></td></tr>
</xsl:if>
<xsl:if test="string-length(ADD_AFTER_BOIL)">
<tr><td class="text-end">ADD_AFTER_BOIL</td><td><xsl:value-of disable-output-escaping="yes" select="ADD_AFTER_BOIL"/></td></tr>
</xsl:if>
<xsl:if test="string-length(ORIGIN)">
<tr><td class="text-end">ORIGIN</td><td><xsl:value-of disable-output-escaping="yes" select="ORIGIN"/></td></tr>
</xsl:if>
<xsl:if test="string-length(SUPPLIER)">
<tr><td class="text-end">SUPPLIER</td><td><xsl:value-of disable-output-escaping="yes" select="SUPPLIER"/></td></tr>
</xsl:if>
<xsl:if test="string-length(COARSE_FINE_DIFF)">
<tr><td class="text-end">COARSE_FINE_DIFF</td><td><xsl:value-of disable-output-escaping="yes" select="COARSE_FINE_DIFF"/></td></tr>
</xsl:if>
<xsl:if test="string-length(MOISTURE)">
<tr><td class="text-end">MOISTURE</td><td><xsl:value-of disable-output-escaping="yes" select="MOISTURE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DIASTATIC_POWER)">
<tr><td class="text-end">DIASTATIC_POWER</td><td><xsl:value-of disable-output-escaping="yes" select="DIASTATIC_POWER"/></td></tr>
</xsl:if>
<xsl:if test="string-length(PROTEIN)">
<tr><td class="text-end">PROTEIN</td><td><xsl:value-of disable-output-escaping="yes" select="PROTEIN"/></td></tr>
</xsl:if>
<xsl:if test="string-length(MAX_IN_BATCH)">
<tr><td class="text-end">MAX_IN_BATCH</td><td><xsl:value-of disable-output-escaping="yes" select="MAX_IN_BATCH"/></td></tr>
</xsl:if>
<xsl:if test="string-length(RECOMMEND_MASH)">
<tr><td class="text-end">RECOMMEND_MASH</td><td><xsl:value-of disable-output-escaping="yes" select="RECOMMEND_MASH"/></td></tr>
</xsl:if>
<xsl:if test="string-length(IBU_GAL_PER_LB)">
<tr><td class="text-end">IBU_GAL_PER_LB</td><td><xsl:value-of disable-output-escaping="yes" select="IBU_GAL_PER_LB"/></td></tr>
</xsl:if>
<xsl:if test="string-length(NOTES)">
<tr><td class="text-end">NOTES</td><td><xsl:value-of disable-output-escaping="yes" select="NOTES"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_AMOUNT)">
<tr><td class="text-end">+DISPLAY_AMOUNT</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_AMOUNT"/></td></tr>
</xsl:if>
<xsl:if test="string-length(POTENTIAL)">
<tr><td class="text-end">+POTENTIAL</td><td><xsl:value-of disable-output-escaping="yes" select="POTENTIAL"/></td></tr>
</xsl:if>
<xsl:if test="string-length(INVENTORY)">
<tr><td class="text-end">+INVENTORY</td><td><xsl:value-of disable-output-escaping="yes" select="INVENTORY"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_COLOR)">
<tr><td class="text-end">+DISPLAY_COLOR</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_COLOR"/></td></tr>
</xsl:if>
</table>
</div>
</xsl:template>
<!-- MISCS -->
<xsl:template match="MISCS">
<div id="beerxml-miscs">
<!-- <h4>MISCS (<xsl:value-of select="count(MISC)" />)</h4> -->
<xsl:apply-templates select="MISC"/>
</div>
</xsl:template>
<!-- MISCS/MISC-->
<xsl:template match="MISC">
<div id="beerxml-misc">
<h5>MISC <xsl:value-of select="position()"/></h5>
<table class="table table-sm table-bordered">
<tr><td class="text-end">*NAME</td><td><xsl:value-of disable-output-escaping="yes" select="NAME"/></td></tr>
<tr><td class="text-end">*VERSION</td><td><xsl:value-of disable-output-escaping="yes" select="VERSION"/></td></tr>
<tr><td class="text-end">*TYPE</td><td><xsl:value-of disable-output-escaping="yes" select="TYPE"/></td></tr>
<tr><td class="text-end">*USE</td><td><xsl:value-of disable-output-escaping="yes" select="USE"/></td></tr>
<tr><td class="text-end">*TIME</td><td><xsl:value-of disable-output-escaping="yes" select="TIME"/></td></tr>
<tr><td class="text-end">*AMOUNT</td><td><xsl:value-of disable-output-escaping="yes" select="AMOUNT"/></td></tr>
<xsl:if test="string-length(AMOUNT_IS_WEIGHT)">
<tr><td class="text-end">AMOUNT_IS_WEIGHT</td><td><xsl:value-of disable-output-escaping="yes" select="AMOUNT_IS_WEIGHT"/></td></tr>
</xsl:if>
<xsl:if test="string-length(USE_FOR)">
<tr><td class="text-end">USE_FOR</td><td><xsl:value-of disable-output-escaping="yes" select="USE_FOR"/></td></tr>
</xsl:if>
<xsl:if test="string-length(NOTES)">
<tr><td class="text-end">NOTES</td><td><xsl:value-of disable-output-escaping="yes" select="NOTES"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_AMOUNT)">
<tr><td class="text-end">+DISPLAY_AMOUNT</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_AMOUNT"/></td></tr>
</xsl:if>
<xsl:if test="string-length(INVENTORY)">
<tr><td class="text-end">+INVENTORY</td><td><xsl:value-of disable-output-escaping="yes" select="INVENTORY"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_TIME)">
<tr><td class="text-end">+DISPLAY_TIME</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_TIME"/></td></tr>
</xsl:if>
</table>
</div>
</xsl:template>
<!-- YEASTS -->
<xsl:template match="YEASTS">
<div id="beerxml-yeasts">
<!-- <h4>YEASTS (<xsl:value-of select="count(YEAST)" />)</h4> -->
<xsl:apply-templates select="YEAST"/>
</div>
</xsl:template>
<!-- YEASTS/YEAST -->
<xsl:template match="YEAST">
<div id="beerxml-yeast">
<h5>YEAST <xsl:value-of select="position()"/></h5>
<table class="table table-sm table-bordered">
<tr><td class="text-end">*NAME</td><td><xsl:value-of disable-output-escaping="yes" select="NAME"/></td></tr>
<tr><td class="text-end">*VERSION</td><td><xsl:value-of disable-output-escaping="yes" select="VERSION"/></td></tr>
<tr><td class="text-end">*TYPE</td><td><xsl:value-of disable-output-escaping="yes" select="TYPE"/></td></tr>
<tr><td class="text-end">*FORM</td><td><xsl:value-of disable-output-escaping="yes" select="FORM"/></td></tr>
<tr><td class="text-end">*AMOUNT</td><td><xsl:value-of disable-output-escaping="yes" select="AMOUNT"/></td></tr>
<xsl:if test="string-length(AMOUNT_IS_WEIGHT)">
<tr><td class="text-end">AMOUNT_IS_WEIGHT</td><td><xsl:value-of disable-output-escaping="yes" select="AMOUNT_IS_WEIGHT"/></td></tr>
</xsl:if>
<xsl:if test="string-length(LABORATORY)">
<tr><td class="text-end">LABORATORY</td><td><xsl:value-of disable-output-escaping="yes" select="LABORATORY"/></td></tr>
</xsl:if>
<xsl:if test="string-length(PRODUCT_ID)">
<tr><td class="text-end">PRODUCT_ID</td><td><xsl:value-of disable-output-escaping="yes" select="PRODUCT_ID"/></td></tr>
</xsl:if>
<xsl:if test="string-length(MIN_TEMPERATURE)">
<tr><td class="text-end">MIN_TEMPERATURE</td><td><xsl:value-of disable-output-escaping="yes" select="MIN_TEMPERATURE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(MAX_TEMPERATURE)">
<tr><td class="text-end">MAX_TEMPERATURE</td><td><xsl:value-of disable-output-escaping="yes" select="MAX_TEMPERATURE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(FLOCCULATION)">
<tr><td class="text-end">FLOCCULATION</td><td><xsl:value-of disable-output-escaping="yes" select="FLOCCULATION"/></td></tr>
</xsl:if>
<xsl:if test="string-length(ATTENUATION)">
<tr><td class="text-end">ATTENUATION</td><td><xsl:value-of disable-output-escaping="yes" select="ATTENUATION"/></td></tr>
</xsl:if>
<xsl:if test="string-length(BEST_FOR)">
<tr><td class="text-end">BEST_FOR</td><td><xsl:value-of disable-output-escaping="yes" select="BEST_FOR"/></td></tr>
</xsl:if>
<xsl:if test="string-length(TIMES_CULTURED)">
<tr><td class="text-end">TIMES_CULTURED</td><td><xsl:value-of disable-output-escaping="yes" select="TIMES_CULTURED"/></td></tr>
</xsl:if>
<xsl:if test="string-length(MAX_REUSE)">
<tr><td class="text-end">MAX_REUSE</td><td><xsl:value-of disable-output-escaping="yes" select="MAX_REUSE"/></td></tr>
</xsl:if>
<xsl:if test="string-length(ADD_TO_SECONDARY)">
<tr><td class="text-end">ADD_TO_SECONDARY</td><td><xsl:value-of disable-output-escaping="yes" select="ADD_TO_SECONDARY"/></td></tr>
</xsl:if>
<xsl:if test="string-length(NOTES)">
<tr><td class="text-end">NOTES</td><td><xsl:value-of disable-output-escaping="yes" select="NOTES"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_AMOUNT)">
<tr><td class="text-end">+DISPLAY_AMOUNT</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_AMOUNT"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISP_MIN_TEMP)">
<tr><td class="text-end">+DISP_MIN_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="DISP_MIN_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISP_MAX_TEMP)">
<tr><td class="text-end">+DISP_MAX_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="DISP_MAX_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(INVENTORY)">
<tr><td class="text-end">+INVENTORY</td><td><xsl:value-of disable-output-escaping="yes" select="INVENTORY"/></td></tr>
</xsl:if>
<xsl:if test="string-length(CULTURE_DATE)">
<tr><td class="text-end">+CULTURE_DATE</td><td><xsl:value-of disable-output-escaping="yes" select="CULTURE_DATE"/></td></tr>
</xsl:if>
</table>
</div>
</xsl:template>
<!-- WATERS -->
<xsl:template match="WATERS">
<div id="beerxml-waters">
<!-- <h4>WATERS (<xsl:value-of select="count(WATER)" />)</h4> -->
<xsl:apply-templates select="WATER"/>
</div>
</xsl:template>
<!-- WATERS/WATER -->
<xsl:template match="WATER">
<div id="beerxml-water">
<h5>WATER <xsl:value-of select="position()"/></h5>
<table class="table table-sm table-bordered">
<tr><td class="text-end">*NAME</td><td><xsl:value-of disable-output-escaping="yes" select="NAME"/></td></tr>
<tr><td class="text-end">*VERSION</td><td><xsl:value-of disable-output-escaping="yes" select="VERSION"/></td></tr>
<tr><td class="text-end">*AMOUNT</td><td><xsl:value-of disable-output-escaping="yes" select="AMOUNT"/></td></tr>
<tr><td class="text-end">*CALCIUM</td><td><xsl:value-of disable-output-escaping="yes" select="CALCIUM"/></td></tr>
<tr><td class="text-end">*BICARBONATE</td><td><xsl:value-of disable-output-escaping="yes" select="BICARBONATE"/></td></tr>
<tr><td class="text-end">*SULFATE</td><td><xsl:value-of disable-output-escaping="yes" select="SULFATE"/></td></tr>
<tr><td class="text-end">*CHLORIDE</td><td><xsl:value-of disable-output-escaping="yes" select="CHLORIDE"/></td></tr>
<tr><td class="text-end">*SODIUM</td><td><xsl:value-of disable-output-escaping="yes" select="SODIUM"/></td></tr>
<tr><td class="text-end">*MAGNESIUM</td><td><xsl:value-of disable-output-escaping="yes" select="MAGNESIUM"/></td></tr>
<xsl:if test="string-length(PH)">
<tr><td class="text-end">PH</td><td><xsl:value-of disable-output-escaping="yes" select="PH"/></td></tr>
</xsl:if>
<xsl:if test="string-length(NOTES)">
<tr><td class="text-end">NOTES</td><td><xsl:value-of disable-output-escaping="yes" select="NOTES"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_AMOUNT)">
<tr><td class="text-end">+DISPLAY_AMOUNT</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_AMOUNT"/></td></tr>
</xsl:if>
</table>
</div>
</xsl:template>
<!-- MASH -->
<xsl:template match="MASH">
<div id="beerxml-mash">
<!-- <h4>MASH</h4> -->
<table class="table table-sm table-bordered">
<tr><td class="text-end">*NAME</td><td><xsl:value-of disable-output-escaping="yes" select="NAME"/></td></tr>
<tr><td class="text-end">*VERSION</td><td><xsl:value-of disable-output-escaping="yes" select="VERSION"/></td></tr>
<tr><td class="text-end">*GRAIN_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="GRAIN_TEMP"/></td></tr>
<tr><td class="text-end">*MASH_STEPS</td><td><xsl:value-of disable-output-escaping="yes" select="MASH_STEPS"/></td></tr>
<xsl:if test="string-length(TUN_TEMP)">
<tr><td class="text-end">TUN_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="TUN_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(SPARGE_TEMP)">
<tr><td class="text-end">SPARGE_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="SPARGE_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(PH)">
<tr><td class="text-end">PH</td><td><xsl:value-of disable-output-escaping="yes" select="PH"/></td></tr>
</xsl:if>
<xsl:if test="string-length(TUN_WEIGHT)">
<tr><td class="text-end">TUN_WEIGHT</td><td><xsl:value-of disable-output-escaping="yes" select="TUN_WEIGHT"/></td></tr>
</xsl:if>
<xsl:if test="string-length(TUN_SPECIFIC_HEAT)">
<tr><td class="text-end">TUN_SPECIFIC_HEAT</td><td><xsl:value-of disable-output-escaping="yes" select="TUN_SPECIFIC_HEAT"/></td></tr>
</xsl:if>
<xsl:if test="string-length(EQUIP_ADJUST)">
<tr><td class="text-end">EQUIP_ADJUST</td><td><xsl:value-of disable-output-escaping="yes" select="EQUIP_ADJUST"/></td></tr>
</xsl:if>
<xsl:if test="string-length(NOTES)">
<tr><td class="text-end">NOTES</td><td><xsl:value-of disable-output-escaping="yes" select="NOTES"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_GRAIN_TEMP)">
<tr><td class="text-end">+DISPLAY_GRAIN_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_GRAIN_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_TUN_TEMP)">
<tr><td class="text-end">+DISPLAY_TUN_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_TUN_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_SPARGE_TEMP)">
<tr><td class="text-end">+DISPLAY_SPARGE_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_SPARGE_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_TUN_WEIGHT)">
<tr><td class="text-end">+DISPLAY_TUN_WEIGHT</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_TUN_WEIGHT"/></td></tr>
</xsl:if>
</table>
<xsl:apply-templates select="MASH_STEPS"/>
</div>
</xsl:template>
<!-- MASH/MASH_STEPS -->
<xsl:template match="MASH_STEPS">
<div id="beerxml-mash-steps">
<h4>MASH_STEPS (<xsl:value-of select="count(MASH_STEP)"/>)</h4>
<xsl:apply-templates select="MASH_STEP"/>
</div>
</xsl:template>
<!-- MASH/MASH_STEPS/MASH_STEP -->
<xsl:template match="MASH_STEP">
<div id="beerxml-mash-step">
<h5>MASH_STEP <xsl:value-of select="position()"/></h5>
<table class="table table-sm table-bordered">
<tr><td class="text-end">*NAME</td><td><xsl:value-of disable-output-escaping="yes" select="NAME"/></td></tr>
<tr><td class="text-end">*VERSION</td><td><xsl:value-of disable-output-escaping="yes" select="VERSION"/></td></tr>
<tr><td class="text-end">*TYPE</td><td><xsl:value-of disable-output-escaping="yes" select="TYPE"/></td></tr>
<tr><td class="text-end">*INFUSE_AMOUNT</td><td><xsl:value-of disable-output-escaping="yes" select="INFUSE_AMOUNT"/></td></tr>
<tr><td class="text-end">*STEP_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="STEP_TEMP"/></td></tr>
<tr><td class="text-end">*STEP_TIME</td><td><xsl:value-of disable-output-escaping="yes" select="STEP_TIME"/></td></tr>
<xsl:if test="string-length(RAMP_TIME)">
<tr><td class="text-end">RAMP_TIME</td><td><xsl:value-of disable-output-escaping="yes" select="RAMP_TIME"/></td></tr>
</xsl:if>
<xsl:if test="string-length(END_TEMP)">
<tr><td class="text-end">END_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="END_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DESCRIPTION)">
<tr><td class="text-end">+DESCRIPTION</td><td><xsl:value-of disable-output-escaping="yes" select="DESCRIPTION"/></td></tr>
</xsl:if>
<xsl:if test="string-length(WATER_GRAIN_RATIO)">
<tr><td class="text-end">+WATER_GRAIN_RATIO</td><td><xsl:value-of disable-output-escaping="yes" select="WATER_GRAIN_RATIO"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DECOCTION_AMT)">
<tr><td class="text-end">+DECOCTION_AMT</td><td><xsl:value-of disable-output-escaping="yes" select="DECOCTION_AMT"/></td></tr>
</xsl:if>
<xsl:if test="string-length(INFUSE_TEMP)">
<tr><td class="text-end">+INFUSE_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="INFUSE_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_STEP_TEMP)">
<tr><td class="text-end">+DISPLAY_STEP_TEMP</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_STEP_TEMP"/></td></tr>
</xsl:if>
<xsl:if test="string-length(DISPLAY_INFUSE_AMT)">
<tr><td class="text-end">+DISPLAY_INFUSE_AMT</td><td><xsl:value-of disable-output-escaping="yes" select="DISPLAY_INFUSE_AMT"/></td></tr>
</xsl:if>
</table>
</div>
</xsl:template>
</xsl:stylesheet><!-- end beer.xsl -->