Однако счет всегда равен нулю.Может кто-нибудь сказать, что мне не хватает.
Ответ №1: Вы подсчитываете количество Attribute
элементов, имеющих атрибут с именем Type
, значение которого ComplexAttr
:
<xsl:when test="count(//Attribute[@Type='ComplexAttr']) > 0">
Но вы должны посчитать количество Attribute
элементов, имеющих дочерний элемент с именем Type
, значение которого ComplexAttr
:
<xsl:when test="count(//Attribute[Type='ComplexAttr']) > 0">
Создание толькоэто изменение вашего XSLT приводит к прохождению теста.
Также может кто-нибудь подсказать мне, как улучшить последнюю часть xslt, где я использую много операторов xsl: if.
Ответ № 2: Я бы объединил каждое из этих условий в одно:
<xsl:if test="Name['Retail' or 'Environment' or
'Master Pack Qty' or 'Master Pack Height'] and Value=''">
<errorCode>"value for <xsl:value-of select="Name"/> is missing."</errorCode>
</xsl:if>
Каждая ситуация обрабатывается одинаково, поэтому нет необходимости хранить их отдельно.
Эта упрощенная таблица стилей:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="type" match="Attribute" use="Type"/>
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="Attribute">
<xsl:if test="Name['Buyer ID' or 'Coordinator ID' or 'Retail' or
'Master Pack Qty' or 'Master Pack Height' or 'Master Pack Length' or
'Master Pack Weight' or 'Master Pack Width' or 'Product Description' or
'PO Cost' or 'GTIN' or 'Vendor Model'] and Value=''">
<errorCode>"value for <xsl:value-of select="Name"/> is missing."</errorCode>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Создает следующий вывод (на ваш вход):
<errorCode>"value for Retail is missing."</errorCode>