我正在尝试将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)"/>
变量在不同模板的范围内。请帮助我实现最后一行输出。
答案 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>