使用XSLT模板范围之外的变量

时间:2016-03-09 13:58:07

标签: xml xslt

我正在尝试将xml从一种格式转换为另一种格式,我需要一些帮助,因为我是xslt的新手。我的输入/源xml是这样的:

<field name="Duration">
    <Duration value="00:13:56:544" />
    <DurationFrames value="20057" />
    <DurationSMPTE value="00:13:56:13" />
</field>

所需的输出xml应该是这样的:

<field internal="yes" name="Frames" value="20057"/>
<field internal="yes" name="Duration_msec" value="00:13:56:544"/>
<field internal="yes" name="Duration_SMPTE" value="00:13:56:13"/>
<field name="Duration" value="00:13:56:544(13)"/>

此处持续时间:00:13:56:544(13)的值是两个字段的组合:

1)Duration_msec(00:13:56:544)

2)Duration_SMPTE的最后部分(00:13:56:13),即13

这是一个较大的XML的一小部分,我只发布我发现困难的XML节点。

这是我写的XSLT:

<xsl:when test="@name='Duration'">                    
    <xsl:apply-templates select="node()" />
 </xsl:when>

这是我的模板:

  <xsl:template match="Duration">
    <xsl:variable name="var_Duration_val" select="@value" />
    <field internal="yes" name="Duration_msec" value="{$var_Duration_val}"/>
  </xsl:template>

  <xsl:template match="DurationFrames">
    <xsl:variable name="var_Duration_Frames" select="@value" />
    <field internal="yes" name="Frames" value="{$var_Duration_Frames}"/>
  </xsl:template>

  <xsl:template match="DurationSMPTE">
    <xsl:variable name="var_Duration_smpte" select="@value" />
    <field internal="yes" name="Duration_SMPTE" value="{$var_Duration_smpte}"/>
  </xsl:template>

我在实现最后一部分时遇到了问题,即

<field name="Duration" value="00:13:56:544(13)"/>

变量在不同模板的范围内。请帮助我实现最后一行输出。

1 个答案:

答案 0 :(得分:2)

简单地说:

<xsl:template match="field[@name='Duration']">
    <field internal="yes" name="Frames" value="{DurationFrames/@value}"/>
    <field internal="yes" name="Duration_msec" value="{Duration/@value}"/>
    <field internal="yes" name="Duration_SMPTE" value="{DurationSMPTE/@value}"/>
    <field name="Duration" value="{Duration/@value}({substring(DurationSMPTE/@value, 10,2)})"/>
</xsl:template>