У нас есть шаблон, как, например:Лучший способ подавить некоторый код, выполняемый в шаблоне при рефакторинге?
<xsl:template name = "MyTemplate">
<!-- do some stuff-->
<xsl:apply-templates select = "Node"/>
</xsl:template>
Мы называем это с
<xsl:call-template name="MyTemplate"/>
Теперь мы собираемся реорганизовать это, так что этот внутренний применять шаблон не обязательно применять каждый раз, когда в шаблон называется. Мы хотим решить, следует ли применять его при вызове внешнего шаблона.
Однако мы не хотим (или не соглашаемся со мной по этому вопросу) проходить и реорганизовывать каждый существующий вызов внешнего шаблона, вместо этого мы должны реорганизовывать существующие приложения, где мы хотим, чтобы функциональность изменилась.
Там несколько способов, которые мы можем сделать это:
Во-первых, мы можем использовать либо XSLT-логическое значение, или строку, чтобы определить, должен ли он работать или нет.
Boolean:
<xsl:template name = "MyTemplate">
<xsl:param name="UseNode" select = "true()"/>
<!-- do some stuff-->
<xsl:if test="$UseNode = true()">
<xsl:apply-templates select = "Node"/>
</xsl:if>
</xsl:template>
Строка:
<xsl:template name = "MyTemplate">
<xsl:param name="UseNode" select = 'true'/>
<!-- do some stuff-->
<xsl:if test="$UseNode = 'true'">
<xsl:apply-templates select = "Node"/>
</xsl:if>
</xsl:template>
Во-вторых, мы можем либо установить его подавляют с использованием параметра или использование с помощью параметра.
Использование:
<xsl:template name = "MyTemplate">
<xsl:param name="UseNode" select = "true()"/>
<!-- do some stuff-->
<xsl:if test="$UseNode = true()">
<xsl:apply-templates select = "Node"/>
</xsl:if>
</xsl:template>
Используйте узел:
<xsl:call-template name="MyTemplate"/>
Не используйте узел:
<xsl:call-template name="MyTemplates">
<xsl:with-param name="UseNode" select = "false()"/>
</xsl:call-template>
Подавить:
<xsl:template name = "MyTemplate">
<xsl:param name="SuppressNode" select = "false()"/>
<!-- do some stuff-->
<xsl:if test="$SuppressNode = false()">
<xsl:apply-templates select = "Node"/>
</xsl:if>
</xsl:template>
Используйте узел:
<xsl:call-template name="MyTemplate"/>
Не используйте узел:
<xsl:call-template name="MyTemplates">
<xsl:with-param name="SuppressNode" select = "true()"/>
</xsl:call-template>
Какой самый лучший способ реорганизовать этот шаблон, и почему?
nb. еще не проверял этот код - не уверен, что эти логические операции работают :) – dwjohnston
Возможно, вам стоит проверить свой код. Если вы не знаете, работает оно или нет, как вы знаете, что это неправильно? –