Подсчитайте все атрибуты, которые имеют значения, и используйте их для проверки:
<xsl:template match="Services">
<xsl:variable name="line-count"
select="count(
./@*[(name() = 'Street'
or name() = 'ExtraAddress'
or name() = 'VillageTownName'
or name() = 'PostalTownName'
or name() = 'County')
and string-length(.) > 0]
)"
/>
<xsl:choose>
<xsl:when test="$line-count > 1">
<xsl:text>Valid</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>Invalid</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Если это единственные атрибуты, которые могут появляться в элементе Services
, то вы можете удалить явные проверки имен и использовать вместо них @*
в качестве селектора.
Я проверил это с помощью XSLT 1.0, и он отлично работает.
Вам потребуется поместить элемент apply-template
вместо моего элемента text
в допустимом регистре, чтобы напечатать элемент address
. Это легкая часть.