/ .. / / -> 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="duplicate" select="false()"/>
  <xsl:param name="user-format"/>

  <xsl:variable name="default-format">0.##</xsl:variable>
 
  <xsl:template match="uom">
    <xsl:element name="xsl:stylesheet">
      <xsl:attribute name="version">1.0</xsl:attribute>
      <xsl:element name="xsl:variable">
        <xsl:attribute name="name">pi</xsl:attribute>
        <xsl:attribute name="select">3.14159265359</xsl:attribute>
      </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:if test="convert">
        <xsl:element name="xsl:template">
          <xsl:attribute name="match">
            <xsl:text>quantityValue|qtyvalue|</xsl:text>
            <xsl:text>quantityTolerance|qtytolerance|</xsl:text>
            <xsl:text>quantity[not(*)]</xsl:text>
          </xsl:attribute>
          <xsl:element name="xsl:variable">
            <xsl:attribute name="name">uom</xsl:attribute>
            <xsl:attribute name="select">
              <xsl:text>@quantityUnitOfMeasure|@qtyuom|</xsl:text>
              <xsl:text>parent::quantityGroup/@quantityUnitOfMeasure|parent::qtygrp/@qtyuom|</xsl:text>
              <xsl:text>ancestor-or-self::quantity/@quantityTypeSpecifics</xsl:text>
            </xsl:attribute>
          </xsl:element>
          <xsl:element name="xsl:variable">
            <xsl:attribute name="name">value</xsl:attribute>
            <xsl:attribute name="select">.</xsl:attribute>
          </xsl:element>
          <xsl:element name="xsl:copy">
            <xsl:element name="xsl:apply-templates">
              <xsl:attribute name="select">@*</xsl:attribute>
            </xsl:element>
            <xsl:element name="xsl:choose">
              <xsl:apply-templates select="convert">
                <xsl:with-param name="uom-format" select="@format"/>
              </xsl:apply-templates>
              <xsl:element name="xsl:otherwise">
                <xsl:element name="xsl:value-of">
                  <xsl:attribute name="select">.</xsl:attribute>
                </xsl:element>
              </xsl:element>
            </xsl:element>
          </xsl:element>
        </xsl:element>
        <xsl:element name="xsl:template">
          <xsl:attribute name="match">
            <xsl:text>@quantityUnitOfMeasure|@qtyuom|</xsl:text>
            <xsl:text>@quantityTypeSpecifics</xsl:text>
          </xsl:attribute>
          <xsl:element name="xsl:attribute">
            <xsl:attribute name="name">{name()}</xsl:attribute>
            <xsl:element name="xsl:choose">
              <xsl:apply-templates select="convert" mode="attr"/>
              <xsl:element name="xsl:otherwise">
                <xsl:element name="xsl:value-of">
                  <xsl:attribute name="select">.</xsl:attribute>
                </xsl:element>
              </xsl:element>
            </xsl:element>
          </xsl:element>
        </xsl:element>
      </xsl:if>
    </xsl:element>
  </xsl:template>

  <xsl:template match="convert">
    <xsl:param name="uom-format"/>
    <xsl:variable name="format">
      <xsl:choose>
        <xsl:when test="@format">
          <xsl:value-of select="@format"/>
        </xsl:when>
        <xsl:when test="$user-format">
          <xsl:value-of select="$user-format"/>
        </xsl:when>
        <xsl:when test="$uom-format">
          <xsl:value-of select="$uom-format"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="$default-format"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
    <xsl:element name="xsl:when">
      <xsl:attribute name="test">
        <xsl:text>$uom = '</xsl:text>
        <xsl:value-of select="@from"/>
        <xsl:text>'</xsl:text>
      </xsl:attribute>
      <xsl:if test="$duplicate and @from != @to">
        <xsl:element name="xsl:processing-instruction">
          <xsl:attribute name="name">s1kd-uom_CONVERTED</xsl:attribute>
        </xsl:element>
      </xsl:if>
      <xsl:element name="xsl:value-of">
        <xsl:attribute name="select">
          <xsl:choose>
            <xsl:when test="@formula">
              <xsl:text>format-number(</xsl:text>
              <xsl:value-of select="@formula"/>
              <xsl:text>, '</xsl:text>
              <xsl:value-of select="$format"/>
              <xsl:text>')</xsl:text>
            </xsl:when>
            <xsl:otherwise>
              <xsl:text>$value</xsl:text>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:attribute>
      </xsl:element>
    </xsl:element>
  </xsl:template>

  <xsl:template match="convert" mode="attr">
    <xsl:element name="xsl:when">
      <xsl:attribute name="test">
        <xsl:text>. = '</xsl:text>
        <xsl:value-of select="@from"/>
        <xsl:text>'</xsl:text>
      </xsl:attribute>
      <xsl:value-of select="@to"/>
    </xsl:element>
  </xsl:template>

</xsl:stylesheet>


/ gopher://khzae.net/0/s1000d/s1kd-tools/src/tools/s1kd-uom/uom.xsl
Styles: Light Dark Classic