将XSL v2转换为v1

时间:2016-05-11 20:04:46

标签: xml xslt

我编写了一个需要拆分字符串的XSL,这很简单,但我发现那时使用XSL的系统只接受v1而我在v2中写了我的xsl。

有问题将其转换为v1。非常感谢任何帮助。

感谢

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:soa="urn:telestream.net:soa:core"
            version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
  <soa:Label identifier="5f01d03f-f867-4a57-92e0-19d239a3582d" name="Duration - Timecode to Frames pt2" description="" instance="dc07adf4-79e4-4d33-b740-ece5bc0af991" signature="00000000-0000-0000-0000-000000000000">
     <soa:Parameter type="timecode" identifier="82795f2a-5a2e-41ca-b1da-0c35a9c584e4" bindable="True" name="Duration Timecode" enabled="true" disableable="false" optionseditable="false" row="-1" column="-1" columnspan="1">
        <xsl:value-of select="normalize-space(/soa:Label/soa:Parameter[1]/text()[1])"/>
        <soa:Default>00:00:00:00@29.97</soa:Default>
        <soa:IsRequired>false</soa:IsRequired>
     </soa:Parameter>
    <xsl:variable name="total-frames">
        <xsl:analyze-string select="normalize-space(/soa:Label/soa:Parameter[1]/text()[1])"
                           regex="^(\d+):(\d+):(\d+):(\d+)@(\d+)$">
          <xsl:matching-substring>
             <xsl:variable name="hours" select="xs:integer(regex-group(1))"/>
             <xsl:variable name="minutes" select="xs:integer(regex-group(2))"/>
             <xsl:variable name="seconds" select="xs:integer(regex-group(3))"/>
             <xsl:variable name="frames" select="xs:integer(regex-group(4))"/>
             <xsl:variable name="fps" select="xs:integer(regex-group(5))"/>
             <xsl:value-of select="$hours * 60 * 60 * $fps + $minutes * 60 * $fps + $seconds * $frames + $frames"/>
          </xsl:matching-substring>
       </xsl:analyze-string>
   </xsl:variable> 
     <soa:Parameter type="int32" identifier="ca643595-6cbb-46b4-bf9b-da93c4348a4e" bindable="True" name="Duration Frames" enabled="true" disableable="false" optionseditable="false" row="-1" column="-1" columnspan="1">
        <xsl:value-of select="$total-frames"/>
        <soa:Default>0</soa:Default>
        <soa:IsRequired>false</soa:IsRequired>
     </soa:Parameter>
  </soa:Label>

1 个答案:

答案 0 :(得分:0)

  

我写了一个需要拆分字符串的XSL

分割字符串实际上非常简单:

给出输入:

<timecode>01:02:03:04@29.97</timecode>

你可以使用:

<xsl:variable name="hours" select="substring-before(timecode, ':')"/>
<xsl:variable name="minutes" select="substring-before(substring-after(timecode, ':'), ':')"/>
<xsl:variable name="seconds" select="substring-before(substring-after(substring-after(timecode, ':'), ':'), ':')"/>
<xsl:variable name="frames" select="substring-before(substring-after(substring-after(substring-after(timecode, ':'), ':'), ':'), '@')"/>
<xsl:variable name="fps" select="substring-after(timecode, '@')"/>

提取各个组件。