Я хочу сделать хороший, если или иначе
Для взаимоисключающих условий вы должны использовать xsl:choose
, а не серию xsl:if
инструкций:
<ORDER_UNIT>
<xsl:choose>
<xsl:when test="unit = '110-01'">PCE</xsl:when>
<xsl:when test="unit = '120-01'">PCE</xsl:when>
<xsl:when test="unit = '130-01'">MTR</xsl:when>
<xsl:when test="unit = '140-01'">PCE</xsl:when>
<xsl:when test="unit = '150-01'">SE</xsl:when>
<xsl:when test="unit = '160-01'">PCE</xsl:when>
<xsl:when test="unit = '167-01'">SE</xsl:when>
<xsl:when test="unit = '168-01'">SE</xsl:when>
<xsl:when test="unit = '169-01'">SE</xsl:when>
<xsl:when test="unit = '170-01'">SE</xsl:when>
<xsl:when test="unit = '171-01'">SE</xsl:when>
<xsl:when test="unit = '172-01'">SE</xsl:when>
<xsl:when test="unit = '172-02'">SE</xsl:when>
<xsl:when test="unit = '173-01'">SE</xsl:when>
<xsl:when test="unit = '174-01'">SE</xsl:when>
<xsl:when test="unit = '175-01'">SE</xsl:when>
<xsl:when test="unit = '180-01'">PCE</xsl:when>
<xsl:when test="unit = '190-01'">PCE</xsl:when>
<xsl:when test="unit = '200-01'">PCE</xsl:when>
<xsl:when test="unit = '205-01'">PCE</xsl:when>
<xsl:when test="unit = '210-01'">MTR</xsl:when>
<xsl:when test="unit = '220-01'">PCE</xsl:when>
<xsl:when test="unit = '230-01'">PCE</xsl:when>
<xsl:when test="unit = '260-01'">PCE</xsl:when>
<xsl:when test="unit = '270-01'">PCE</xsl:when>
<xsl:when test="unit = '280-01'">MTR</xsl:when>
<xsl:when test="unit = '310-01'">PCE</xsl:when>
<xsl:when test="unit = '350-01'">MTR</xsl:when>
<xsl:when test="unit = '360-01'">MTR</xsl:when>
<xsl:when test="unit = '370-01'">MTR</xsl:when>
<xsl:when test="unit = '380-01'">MTR</xsl:when>
<xsl:when test="unit = '390-01'">MTR</xsl:when>
<xsl:when test="unit = '400-01'">MTR</xsl:when>
</xsl:choose>
</ORDER_UNIT>
Таким образом, когда test="unit = '130-01'"
возвращает значение true, результирующая строка "MTR"
будет возвращена немедленно, и вы исключите избыточную оценку 30 последующих тестов, что сэкономит время, электроэнергию и окружающую среду.
Вы можете еще больше повысить эффективность, проверив сначала самые частые значения.
Другой вариант - поместить все проверочные значения в переменную (или даже в отдельный документ) и использовать key для поиска соответствующего результата оттуда - но это практично, только если вы используете XSLT 2.0 или выше (хотя все еще возможно в XSLT 1.0 с немного большим количеством кода).