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>