You can just keep adding more test logic to the same shipping rate calculation. For example, let's say in addition to the base rate, you want to charge an extra $3 surcharge for every large item over 10 grams, you can do so like this:
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/">
<out>
<shippingAmount>
<xsl:variable name="baseShippingAmount">
<xsl:choose>
<xsl:when test="in/salesOrder/subTotalAmount &gt;= 0 and in/salesOrder/subTotalAmount &lt;= 100">
10.00
</xsl:when>
<xsl:when test="in/salesOrder/subTotalAmount &gt; 100 and in/salesOrder/subTotalAmount &lt;= 200">
15.00
</xsl:when>
<xsl:otherwise>
0.00
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Count the number of large item order detail items -->
<xsl:variable name="numLargeItems" select="count(in/salesOrder/salesOrderDetails/salesOrderDetail[string(weight) and weight &gt;= 10])" />
<!-- Generate the sum of the two charges. This is the final shipping calculation charge -->
<xsl:value-of select="$baseShippingAmount + ($numLargeItems * 3.00)" />
</shippingAmount>
</out>
</xsl:template>
</xsl:transform>