2016-03-09 2 views
0

Я пытаюсь преобразовать xml из одного формата в другой, и мне нужна помощь, поскольку я новичок в xslt. Мой вход/источник XML, как это:Использование переменной за пределами шаблона XSLT

<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)"/> 

Переменные в разных шаблонах. Пожалуйста, помогите мне в достижении последней строки вывода.

ответ

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> 
+0

The XSL: шаблон матч = "поле [@ имя = 'Продолжительность']" не работал/соответствует узлу XML. Но другие линии помогли мне. –

+0

Вот что сработало для меня: ' ' –

+0

Я не вижу всю вашу таблицу стилей, как в вашем [предыдущем вопросе] (http://stackoverflow.com/questions/35860500/need-help-in-choosing-between-xslfor-each-and-xsltemplate) Я подозреваю, что вы используете 'xsl: choose', где вы * должен * использовать отдельные шаблоны. –

Смежные вопросы