Как я могу сделать этот код более структурированным или легче увидеть, если утверждение здесь не так хорошо - PullRequest
0 голосов
/ 04 ноября 2019

Я хочу сделать хорошее, если или иное, или для каждого утверждения, что у меня сейчас получилось, это немного грязно

это то, что я имею сейчас, но это слишком грязная помощь?

<xsl:if test="unit = '110-01'"><ORDER_UNIT>PCE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '120-01'"><ORDER_UNIT>PCE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '130-01'"><ORDER_UNIT>MTR</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '140-01'"><ORDER_UNIT>PCE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '150-01'"><ORDER_UNIT>SE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '160-01'"><ORDER_UNIT>PCE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '167-01'"><ORDER_UNIT>SE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '168-01'"><ORDER_UNIT>SE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '169-01'"><ORDER_UNIT>SE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '170-01'"><ORDER_UNIT>SE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '171-01'"><ORDER_UNIT>SE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '172-01'"><ORDER_UNIT>SE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '172-02'"><ORDER_UNIT>SE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '173-01'"><ORDER_UNIT>SE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '174-01'"><ORDER_UNIT>SE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '175-01'"><ORDER_UNIT>SE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '180-01'"><ORDER_UNIT>PCE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '190-01'"><ORDER_UNIT>PCE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '200-01'"><ORDER_UNIT>PCE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '205-01'"><ORDER_UNIT>PCE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '210-01'"><ORDER_UNIT>MTR</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '220-01'"><ORDER_UNIT>PCE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '230-01'"><ORDER_UNIT>PCE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '260-01'"><ORDER_UNIT>PCE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '270-01'"><ORDER_UNIT>PCE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '280-01'"><ORDER_UNIT>MTR</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '310-01'"><ORDER_UNIT>PCE</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '350-01'"><ORDER_UNIT>MTR</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '360-01'"><ORDER_UNIT>MTR</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '370-01'"><ORDER_UNIT>MTR</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '380-01'"><ORDER_UNIT>MTR</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '390-01'"><ORDER_UNIT>MTR</ORDER_UNIT></xsl:if>
<xsl:if test="unit = '400-01'"><ORDER_UNIT>MTR</ORDER_UNIT></xsl:if>

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Ну, две вещи, которые вы можете сделать:

1) Прекратить повторение узла вывода, поэтому:

<ORDER_UNIT>
<xsl:if test="condition">value</xsl:if>
<xsl:if test="condition">value</xsl:if>
</ORDER_UNIT>

2) Сгруппировать повторяющиеся выходные значения:

<xsl:if test="unit = '167-01' or unit = '168-01'">SE</xsl:if>
0 голосов
/ 04 ноября 2019

Я хочу сделать хороший, если или иначе

Для взаимоисключающих условий вы должны использовать 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 с немного большим количеством кода).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...