..
/
download
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:param name="format">SI</xsl:param>
<xsl:template match="uomDisplay">
<xsl:variable name="selected-format" select="format[@name = $format]"/>
<xsl:element name="xsl:stylesheet">
<xsl:attribute name="version">1.0</xsl:attribute>
<xsl:element name="xsl:decimal-format">
<xsl:attribute name="name">decimal-format</xsl:attribute>
<xsl:attribute name="decimal-separator">
<xsl:value-of select="$selected-format/@decimalSeparator"/>
</xsl:attribute>
<xsl:attribute name="grouping-separator">
<xsl:value-of select="$selected-format/@groupingSeparator"/>
</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:variable">
<xsl:attribute name="name">decimal-separator</xsl:attribute>
<xsl:element name="xsl:text">
<xsl:value-of select="$selected-format/@decimalSeparator"/>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:variable">
<xsl:attribute name="name">grouping-separator</xsl:attribute>
<xsl:element name="xsl:text">
<xsl:value-of select="$selected-format/@groupingSeparator"/>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:template">
<xsl:attribute name="match">@*|node()</xsl:attribute>
<xsl:element name="xsl:copy">
<xsl:element name="xsl:apply-templates">
<xsl:attribute name="select">@*|node()</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:template">
<xsl:attribute name="name">repeat-string</xsl:attribute>
<xsl:element name="xsl:param">
<xsl:attribute name="name">string</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:param">
<xsl:attribute name="name">count</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:param">
<xsl:attribute name="name">group</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:param">
<xsl:attribute name="name">separator</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:if">
<xsl:attribute name="test">$count > 0</xsl:attribute>
<xsl:element name="xsl:value-of">
<xsl:attribute name="select">$string</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:if">
<xsl:attribute name="test">$group and $count > 1 and $count mod $group = 1</xsl:attribute>
<xsl:element name="xsl:value-of">
<xsl:attribute name="select">$separator</xsl:attribute>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:call-template">
<xsl:attribute name="name">repeat-string</xsl:attribute>
<xsl:element name="xsl:with-param">
<xsl:attribute name="name">string</xsl:attribute>
<xsl:attribute name="select">$string</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:with-param">
<xsl:attribute name="name">count</xsl:attribute>
<xsl:attribute name="select">$count - 1</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:with-param">
<xsl:attribute name="name">group</xsl:attribute>
<xsl:attribute name="select">$group</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:with-param">
<xsl:attribute name="name">separator</xsl:attribute>
<xsl:attribute name="select">$separator</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:template">
<xsl:attribute name="name">generate-number-format</xsl:attribute>
<xsl:element name="xsl:param">
<xsl:attribute name="name">value</xsl:attribute>
<xsl:attribute name="select">.</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:variable">
<xsl:attribute name="name">abs</xsl:attribute>
<xsl:element name="xsl:choose">
<xsl:element name="xsl:when">
<xsl:attribute name="test">starts-with($value, '-')</xsl:attribute>
<xsl:element name="xsl:value-of">
<xsl:attribute name="select">substring-after($value, '-')</xsl:attribute>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:otherwise">
<xsl:element name="xsl:value-of">
<xsl:attribute name="select">$value</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:variable">
<xsl:attribute name="name">has-decimal</xsl:attribute>
<xsl:attribute name="select">contains($abs, '.')</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:call-template">
<xsl:attribute name="name">repeat-string</xsl:attribute>
<xsl:element name="xsl:with-param">
<xsl:attribute name="name">string</xsl:attribute>
<xsl:text>0</xsl:text>
</xsl:element>
<xsl:element name="xsl:with-param">
<xsl:attribute name="name">count</xsl:attribute>
<xsl:element name="xsl:choose">
<xsl:element name="xsl:when">
<xsl:attribute name="test">$has-decimal</xsl:attribute>
<xsl:element name="xsl:value-of">
<xsl:attribute name="select">string-length(substring-before($abs, '.'))</xsl:attribute>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:otherwise">
<xsl:element name="xsl:value-of">
<xsl:attribute name="select">string-length($abs)</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:with-param">
<xsl:attribute name="name">group</xsl:attribute>
<xsl:text>3</xsl:text>
</xsl:element>
<xsl:element name="xsl:with-param">
<xsl:attribute name="name">separator</xsl:attribute>
<xsl:element name="xsl:value-of">
<xsl:attribute name="select">$grouping-separator</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:if">
<xsl:attribute name="test">$has-decimal</xsl:attribute>
<xsl:element name="xsl:value-of">
<xsl:attribute name="select">$decimal-separator</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:call-template">
<xsl:attribute name="name">repeat-string</xsl:attribute>
<xsl:element name="xsl:with-param">
<xsl:attribute name="name">string</xsl:attribute>
<xsl:text>0</xsl:text>
</xsl:element>
<xsl:element name="xsl:with-param">
<xsl:attribute name="name">count</xsl:attribute>
<xsl:attribute name="select">string-length(substring-after($value, '.'))</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:template">
<xsl:attribute name="name">format-quantity-value</xsl:attribute>
<xsl:element name="xsl:param">
<xsl:attribute name="name">value</xsl:attribute>
<xsl:attribute name="select">.</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:variable">
<xsl:attribute name="name">format</xsl:attribute>
<xsl:element name="xsl:call-template">
<xsl:attribute name="name">generate-number-format</xsl:attribute>
<xsl:element name="xsl:with-param">
<xsl:attribute name="name">value</xsl:attribute>
<xsl:attribute name="select">$value</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:value-of">
<xsl:attribute name="select">format-number($value, $format, 'decimal-format')</xsl:attribute>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:template">
<xsl:attribute name="match">quantity</xsl:attribute>
<xsl:choose>
<xsl:when test="wrapInto/*">
<xsl:apply-templates select="wrapInto/*"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="quantity"/>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
<xsl:element name="xsl:template">
<xsl:attribute name="match">quantityGroup</xsl:attribute>
<xsl:element name="xsl:choose">
<xsl:element name="xsl:when">
<xsl:attribute name="test">@quantityGroupType = 'minimum'</xsl:attribute>
<xsl:element name="xsl:choose">
<xsl:element name="xsl:when">
<xsl:attribute name="test">following-sibling::quantityGroup</xsl:attribute>
<xsl:value-of select="groupTypePrefixes/minimumRange"/>
</xsl:element>
<xsl:element name="xsl:otherwise">
<xsl:value-of select="groupTypePrefixes/minimum"/>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:when">
<xsl:attribute name="test">@quantityGroupType = 'maximum'</xsl:attribute>
<xsl:element name="xsl:choose">
<xsl:element name="xsl:when">
<xsl:attribute name="test">preceding-sibling::quantityGroup</xsl:attribute>
<xsl:value-of select="groupTypePrefixes/maximumRange"/>
</xsl:element>
<xsl:element name="xsl:otherwise">
<xsl:value-of select="groupTypePrefixes/maximum"/>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:otherwise">
<xsl:value-of select="groupTypePrefixes/nominal"/>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:for-each">
<xsl:attribute name="select">quantityValue|quantityTolerance</xsl:attribute>
<xsl:element name="xsl:if">
<xsl:attribute name="test">position() != 1</xsl:attribute>
<xsl:element name="xsl:text">
<xsl:text> </xsl:text>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:apply-templates">
<xsl:attribute name="select">.</xsl:attribute>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:apply-templates">
<xsl:attribute name="select">@quantityUnitOfMeasure</xsl:attribute>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:template">
<xsl:attribute name="match">quantityValue</xsl:attribute>
<xsl:element name="xsl:call-template">
<xsl:attribute name="name">format-quantity-value</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:apply-templates">
<xsl:attribute name="select">@quantityUnitOfMeasure</xsl:attribute>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:template">
<xsl:attribute name="match">quantityTolerance</xsl:attribute>
<xsl:element name="xsl:call-template">
<xsl:attribute name="name">tolerance-type</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:call-template">
<xsl:attribute name="name">format-quantity-value</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:apply-templates">
<xsl:attribute name="select">@quantityUnitOfMeasure</xsl:attribute>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:template">
<xsl:attribute name="name">tolerance-type</xsl:attribute>
<xsl:element name="xsl:param">
<xsl:attribute name="name">type</xsl:attribute>
<xsl:attribute name="select">@quantityToleranceType</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:choose">
<xsl:element name="xsl:when">
<xsl:attribute name="test">$type = 'plus'</xsl:attribute>
<xsl:text>+</xsl:text>
</xsl:element>
<xsl:element name="xsl:when">
<xsl:attribute name="test">$type = 'minus'</xsl:attribute>
<xsl:text>-</xsl:text>
</xsl:element>
<xsl:element name="xsl:otherwise">
<xsl:text>± </xsl:text>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:choose>
<xsl:when test="uoms">
<xsl:apply-templates select="uoms"/>
</xsl:when>
<xsl:otherwise>
<xsl:element name="xsl:template">
<xsl:attribute name="match">@quantityUnitOfMeasure</xsl:attribute>
<xsl:element name="xsl:text">
<xsl:text> </xsl:text>
</xsl:element>
<xsl:element name="xsl:value-of">
<xsl:attribute name="select">.</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="currencies">
<xsl:apply-templates select="currencies"/>
</xsl:when>
<xsl:otherwise>
<xsl:element name="xsl:template">
<xsl:attribute name="match">@quantityTypeSpecifics</xsl:attribute>
<xsl:attribute name="mode">prefix</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:template">
<xsl:attribute name="match">@quantityTypeSpecifics</xsl:attribute>
<xsl:attribute name="mode">postfix</xsl:attribute>
<xsl:element name="xsl:text">
<xsl:text> </xsl:text>
</xsl:element>
<xsl:element name="xsl:value-of">
<xsl:attribute name="select">.</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:template>
<xsl:template name="quantity">
<xsl:element name="xsl:if">
<xsl:attribute name="test">@quantityTypeSpecifics</xsl:attribute>
<xsl:element name="xsl:apply-templates">
<xsl:attribute name="select">@quantityTypeSpecifics</xsl:attribute>
<xsl:attribute name="mode">prefix</xsl:attribute>
</xsl:element>
</xsl:element>
<xsl:element name="xsl:apply-templates">
<xsl:attribute name="select">*|text()[normalize-space(.)!='']</xsl:attribute>
</xsl:element>
<xsl:element name="xsl:if">
<xsl:attribute name="test">@quantityTypeSpecifics</xsl:attribute>
<xsl:element name="xsl:apply-templates">
<xsl:attribute name="select">@quantityTypeSpecifics</xsl:attribute>
<xsl:attribute name="mode">postfix</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="wrapInto/*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:call-template name="quantity"/>
</xsl:copy>
</xsl:template>
<xsl:template match="uoms">
<xsl:element name="xsl:template">
<xsl:attribute name="match">@quantityUnitOfMeasure</xsl:attribute>
<xsl:copy-of select="xsl:*"/>
<xsl:choose>
<xsl:when test="uom">
<xsl:element name="xsl:choose">
<xsl:apply-templates select="uom"/>
<xsl:element name="xsl:otherwise">
<xsl:element name="xsl:text">
<xsl:text> </xsl:text>
</xsl:element>
<xsl:element name="xsl:value-of">
<xsl:attribute name="select">.</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="xsl:text">
<xsl:text> </xsl:text>
</xsl:element>
<xsl:element name="xsl:value-of">
<xsl:attribute name="select">.</xsl:attribute>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:template>
<xsl:template match="uom">
<xsl:element name="xsl:when">
<xsl:attribute name="test">
<xsl:text>. = '</xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>'</xsl:text>
</xsl:attribute>
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="currencies">
<xsl:element name="xsl:template">
<xsl:attribute name="match">@quantityTypeSpecifics</xsl:attribute>
<xsl:attribute name="mode">prefix</xsl:attribute>
<xsl:copy-of select="xsl:*"/>
<xsl:choose>
<xsl:when test="currency">
<xsl:element name="xsl:choose">
<xsl:apply-templates select="currency" mode="prefix"/>
</xsl:element>
</xsl:when>
</xsl:choose>
</xsl:element>
<xsl:element name="xsl:template">
<xsl:attribute name="match">@quantityTypeSpecifics</xsl:attribute>
<xsl:attribute name="mode">postfix</xsl:attribute>
<xsl:copy-of select="xsl:*"/>
<xsl:choose>
<xsl:when test="currency">
<xsl:element name="xsl:choose">
<xsl:apply-templates select="currency" mode="postfix"/>
<xsl:element name="xsl:otherwise">
<xsl:element name="xsl:text">
<xsl:text> </xsl:text>
</xsl:element>
<xsl:element name="xsl:value-of">
<xsl:attribute name="select">.</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="xsl:text">
<xsl:text> </xsl:text>
</xsl:element>
<xsl:element name="xsl:value-of">
<xsl:attribute name="select">.</xsl:attribute>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:template>
<xsl:template match="currency" mode="prefix">
<xsl:element name="xsl:when">
<xsl:attribute name="test">
<xsl:text>. = '</xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>'</xsl:text>
</xsl:attribute>
<xsl:copy-of select="prefix/node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="currency" mode="postfix">
<xsl:element name="xsl:when">
<xsl:attribute name="test">
<xsl:text>. = '</xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>'</xsl:text>
</xsl:attribute>
<xsl:copy-of select="postfix/node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
gopher://khzae.net/0/s1000d/s1kd-tools/src/tools/s1kd-uom/uomdisplay.xsl