是否可以向文字结果元素添加属性?

时间:2013-03-01 12:31:51

标签: xslt

我有一大堆XSLT模板可以生成包含各种内容的<div>个元素。匹配看起来像这样:

<xsl:template match="block[@name = 'block_blah']">
    <div>
       blah
       <div>foooo</div>
    </div>
</xsl:template>

<xsl:template match="block[@name = 'block2']">
    <div>
       <div>xyz</div>
       abc
    </div>
</xsl:template>

我需要为每个第一级<div>添加一个属性。因此输出将变为:

    <div data-blockname="block_blah">
       blah
       <div>foooo</div>
    </div>

    <div data-blockname="block2">
       <div>xyz</div>
       abc
    </div>

我是否必须手动插入data-blockname="{@name}"?或者有没有办法全局注入它?

1 个答案:

答案 0 :(得分:1)

如你所说,没有办法“全局”执行此操作,但有一些方法可以重构您的XSLT并避免重复,如下所示:

<xsl:template match="block[@name]">
    <div name="{@name}">
      <xsl:apply-templates select="." mode="content" />
    </div>
<xsl:template>

<xsl:template match="block[@name = 'block_blah']" mode="content">
       blah
       <div>foooo</div>
</xsl:template>

<xsl:template match="block[@name = 'block2']" mode="content">
       <div>xyz</div>
       abc
</xsl:template>