A List Apart: for 
people who make websites

Using XML.

XSLT Conversion from XML to Tab-separated Text

If you want to try this files, copy and paste the code into a file called nutrition_csv.xslt in the nutrition directory. (See Linux and Windows setup instructions.)


<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	version="1.0">

<xsl:output method="text"https://alistapart.com/>

<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<xsl:variable name="tab"><xsl:text>&#x09;</xsl:text></xsl:variable>

<!-- category names -->
<xsl:template match="nutrition">
<xsl:text>Name&#x09;Manufacturer&#x09;Serving Size&#x09;</xsl:text>
<xsl:text>Serving Units&#x09;Total Calories&#x09;</xsl:text>
<xsl:text>Calories from Fat&#x09;Total Fat&#x09;</xsl:text>
<xsl:text>Saturated Fat&#x09;Cholesterol&#x09;</xsl:text>
<xsl:text>Sodium&#x09;Carbohydrates&#x09;Fiber&#x09;</xsl:text>
<xsl:text>Protein&#x09;Vitamin A&#x09;Vitamin C&#x09;</xsl:text>
<xsl:text>Calcium&#x09;Iron</xsl:text>
<xsl:value-of select="$newline"https://alistapart.com/>

<!-- daily values; fake the headers -->
<xsl:text>Daily Values&#x09;N/A&#x09;N/A&#x09;N/A&#x09;</xsl:text>
<xsl:text>N/A&#x09;N/A&#x09;</xsl:text>
<xsl:value-of select="daily-values/total-fat"https://alistapart.com/>
<xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="daily-values/saturated-fat"https://alistapart.com/>
<xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="daily-values/cholesterol"https://alistapart.com/>
<xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="daily-values/sodium"https://alistapart.com/>
<xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="daily-values/carb"https://alistapart.com/>
<xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="daily-values/fiber"https://alistapart.com/>
<xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="daily-values/protein"https://alistapart.com/>
<xsl:value-of select="$tab"https://alistapart.com/>
<!-- vitamins/minerals -->
<xsl:text>100&#x09;100&#x09;100&#x09;100</xsl:text>
<xsl:value-of select="$newline"https://alistapart.com/>

<xsl:apply-templates select="food"https://alistapart.com/>
</xsl:template>

<xsl:template match="food">
<xsl:value-of select="name"https://alistapart.com/><xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="mfr"https://alistapart.com/><xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="serving"https://alistapart.com/><xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="serving/@units"https://alistapart.com/><xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="calories/@total"https://alistapart.com/><xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="calories/@fat"https://alistapart.com/><xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="total-fat"https://alistapart.com/><xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="saturated-fat"https://alistapart.com/><xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="cholesterol"https://alistapart.com/><xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="sodium"https://alistapart.com/><xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="carb"https://alistapart.com/><xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="fiber"https://alistapart.com/><xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="protein"https://alistapart.com/><xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="vitamins/a"https://alistapart.com/><xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="vitamins/c"https://alistapart.com/><xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="minerals/ca"https://alistapart.com/><xsl:value-of select="$tab"https://alistapart.com/>
<xsl:value-of select="minerals/fe"https://alistapart.com/><xsl:value-of select="$newline"https://alistapart.com/>
</xsl:template>

</xsl:stylesheet>