我想基于主题参数在动态中替换静态主题中的class
标记属性。
我试过了:
<replace attributes="class" css:theme=".conteudo">conteudo-$section</replace>
而且:
<replace css:theme=".conteudo">
<xsl:attribute name="class">conteudo-$section</xsl:attribute>
<xsl:value-of select="."/>
</replace>
即便如此:
<xsl:template match="//div[contains(concat(' ', normalize-space(@class), ' '), ' conteudo ')]">
<xsl:attribute name="class">
<xsl:value-of select="substring((body/@class), 'section-', 0)" />
</xsl:attribute>
</xsl:template>
由于我还有其他引用.conteudo
元素的规则,因此了解如何处理这些规则的最佳实践(在所需的转换发生之后)也很好,即:
<replace
css:content-children="#portal-column-content"
css:theme-children=".conteudo" />
答案 0 :(得分:1)
您无法在任何地方引用变量,但需要从XPath表达式中执行此操作。
您可以通过在孩子之前插入属性来避免干扰替换子节点。
以下是我要尝试的内容:
<before css:theme-children=".conteudo">
<xsl:attribute name="class">conteudo-<xsl:value-of select="$section" /></xsl:attribute>
</before>
答案 1 :(得分:1)
正如大卫所说,这是正确的做法。 要在子元素之前设置属性,您必须这样做:
<xsl:template match="//*[contains(@class, 'conteudo')]">
<xsl:copy>
<xsl:attribute name="class"><xsl:value-of select="$section" /></xsl:attribute>
<xsl:apply-templates select="@*[not(name()='class')]|node()" />
</xsl:copy>
</xsl:template>
<!--Identity template copies content forward -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>