Это выражение не совсем верно ...
<xsl:when test="(./addressInfo/addressUsage/Code = 'BILL_TO' and Main = 'true')">
Вы на самом деле спрашиваете " Есть ли элемент addressInfo/addressUsage/Code
(ниже partner
), равный 'BILL_TO', и этотам также элемент Main
(ниже partner
), равный 'true'".
Другими словами, он ищет элемент с именем Main
в partner
, а не втот же addressUsage
, что и элемент Code
, который вы проверяете.
Вам нужно сделать это ...
<xsl:when test="addressInfo/addressUsage[Code = 'BILL_TO' and Main = 'true']">
Итак, теперь спрашивается " Есть лиэлемент addressInfo/addressUsage
, в котором для Code
установлено значение 'BILL_TO' и для Main
установлено значение 'true'"?
Обратите внимание, что ./
на самом деле не является необходимым, поэтому яудалите его.
Также обратите внимание, что вам не нужно особо разбираться в том, чтобы использовать xsl:choose
для установки переменной в "Y" или "N". В этом случае вы можете упростить блок кода до этого ....
<xsl:template match="partner">
<partner>
<xsl:variable name="main_bill_to" select="addressInfo/addressUsage[Code = 'BILL_TO' and Main = 'true']" />
<xsl:if test="$main_bill_to">
<result>yes</result>
</xsl:if>
<xsl:if test="not($main_bill_to)">
<result>no</result>
</xsl:if>
</partner>
</xsl:template>
Итак, теперь вы проверяете, существует ли элемент, чтобы определить, что отображать.