Следующее не работает должным образом:
<xsl:template match="xs:complexType">
<xsl:param name="prefix" />
<xsl:if test="$prefix='core'">
<xsl:variable name="prefix" select=""/>
</xsl:if>
<xs:complexType name="{concat($prefix, @name)}">
<xsl:apply-templates select="node()" />
</xs:complexType>
<xsl:apply-templates select=".//xs:element" />
</xsl:template>
Идея состоит в том, что если значение переменной префикса равно «core», я не хочу, чтобы оно добавлялось в значение атрибута name. Любое другое значение, я бы хотел добавить. IE:
<xs:complexType name="coreBirthType">
... является не приемлемым, в то время как следующее будет:
<xs:complexType name="BirthType">
Но я должен допустить, чтобы это произошло:
<xs:complexType name="AcRecHighSchoolType">
Я пробовал это в блоке, но Саксон жалуется, что не нашел закрывающий узел:
<xsl:choose>
<xsl:when test="starts-with(.,'core')">
<xs:complexType name="{@name)}">
</xsl:when>
<xsl:otherwise>
<xs:complexType name="{concat($prefix, @name)}">
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="node()" />
</xs:complexType>
Какой лучший способ справиться с этим?