Вы можете указать значение по умолчанию для параметра, поэтому, когда он не передан, вы можете проверить его.
Хотя в вашем примере это выглядит так, как будто значение по умолчанию значительно упростит ситуацию.
<xsl:template match="xs:complexType">
<xsl:param name="prefix" select="'default-value'" /> <!-- SET default -->
<xsl:variable name="prefix-no-core">
<xsl:choose>
<!-- if no value, default to 'AcRec' -->
<xsl:when test="$prefix = 'default-value'">
<xsl:value-of select="'AcRec'" />
</xsl:when>
<!-- if 'core', leave as empty string -->
<xsl:when test="$prefix = 'core'">
</xsl:when>
<!-- if 'AcRec', set the value -->
<xsl:when test="$prefix = 'AcRec'">
<xsl:value-of select="$prefix" />
</xsl:when>
</xsl:choose>
</xsl:variable>
<xs:complexType name="{concat($prefix-no-core, @name)}">
...
</xsl:template>
Вызовите так, и значение будет 'default-value':
<xsl:apply-templates select="//xs:complexType[@name='AddressType']" />
Вызовите вот так, и значение будет «передано»:
<xsl:apply-templates select="//xs:complexType[@name='AddressType']">
<xsl:with-param name="prefix" value="'passed-value'"/>
</xsl:apply-templates>
РЕДАКТИРОВАТЬ: Для полноты, упрощенная форма исходного примера:
<xsl:template match="xs:complexType">
<xsl:param name="prefix" select="'AcRec'"/>
<xsl:variable name="prefix-no-core">
<xsl:choose>
<!-- if 'core', leave as empty string -->
<xsl:when test="$prefix = 'core'">
</xsl:when>
<!-- defaults to 'AcRec' -->
<xsl:otherwise>
<xsl:value-of select="$prefix" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xs:complexType name="{concat($prefix-no-core, @name)}">
...
</xsl:template>