XSLT: Как мы можем выбрать несколько условий в одном тесте в синтаксисе «выбрать, когда, тестировать»? - PullRequest
0 голосов
/ 26 сентября 2018

Мне нужно проверить несколько условий в XSLT, и я не нашел точного вопроса уже по этой теме.Может ли кто-нибудь помочь мне с некоторыми примерами, пожалуйста?Я не хочу добавлять в тест, чтобы проверить больше ситуаций, в том же тесте.Мои примеры не работают.

                <td align="center" style="font-size=8pt">
                    <xsl:choose>
                        <xsl:when test="esp:DocType[@v='T2']", test="esp:BusType[@v='44']">first</xsl:when>
                        <xsl:otherwise>
                            <xsl:value-of select="esp:AccPnt/@v"/>
                        </xsl:otherwise>
                    </xsl:choose>
                </td>

<td align="center" style="font-size=8pt">
                    <xsl:choose>
                        <xsl:when test="esp:DocType[@v='T2'], esp:BusType[@v='44']">first</xsl:when>
                        <xsl:otherwise>
                            <xsl:value-of select="esp:AccPnt/@v"/>
                        </xsl:otherwise>
                    </xsl:choose>
                </td>

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Читая ваш вопрос, неясно, должны ли каждые или любые ваши условия соответствовать этим xsl:when инструкциям.

В первомВ этом случае вы должны поставить и между этими условиями, тогда как во втором случае или .

По-видимому, Томалак задумывался о "каждом" случаепоэтому он написал условие_1 и условие_2 , но я не уверен в этом.

0 голосов
/ 26 сентября 2018

XPath имеет булевы операторы.

<td align="center" style="font-size=8pt">
    <xsl:choose>
        <xsl:when test="esp:DocType[@v='T2'] and esp:BusType[@v='44']">first</xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="esp:AccPnt/@v"/>
        </xsl:otherwise>
    </xsl:choose>
</td>

Вышеприведенное работает, но, возможно, поначалу неочевидно: в нем сравниваются два набора узлов на пустоту.Пустой набор узлов считается как false в логическом контексте, а заполненный - как true.Таким образом, левая сторона esp:DocType[@v='T2'] выбирает узел или нет, то есть выбирает esp:DocType , только если значение его атрибута @v равно 'T2'.Когда другая половина выражения также выбирает узел, общий результат будет true.

Более очевидный способ написать то же самое будет следующим:

<td align="center" style="font-size=8pt">
    <xsl:choose>
        <xsl:when test="esp:DocType/@v = 'T2' and esp:BusType/@v = '44'">first</xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="esp:AccPnt/@v"/>
        </xsl:otherwise>
    </xsl:choose>
</td>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...