Если вы действительно хотите проверить, заканчивается ли имя файла на «.docx», и не хотите, чтобы оно было более общим, вы можете просто сделать это ...
<xsl:value-of select="substring(@sourcefilename, string-length(@sourcefilename) - 4)"/>
Или, если хотите, в xsl:choose
<xsl:choose>
<xsl:when test="substring(@sourcefilename, string-length(@sourcefilename) - 4) = '.docx'">Is DocX</xsl:when>
<xsl:otherwise>Is Not DocX</xsl:otherwise>
</xsl:choose>
Хотя имейте в виду, что это чувствительно к регистру, поэтому в XSLT 1.0 вам придется проделать немного больше работы, если вы тоже хотите проверить на ".DOCX", например
<xsl:choose>
<xsl:when test="translate(
substring(@sourcefilename, string-length(@sourcefilename) - 4),
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'abcdefghijklmnopqrstuvwxyz') = '.docx'">Is DocX</xsl:when>
<xsl:otherwise>Is Not DocX</xsl:otherwise>
</xsl:choose>
Если бы вы могли перейти на XSLT 2.0 (или 3.0), вы могли бы упростить его до этого
<xsl:when test="ends-with(lower-case(@sourcefilename), '.docx')">Is DocX</xsl:when>