2016-03-23 7 views
0

XSLの書きかけの初心者で、私の現在のプロジェクトのデバッグに問題があります。 EditX-XMLはエラーの変換に失敗しますが、どこにあるかは言いません。 XSLXSL変換に失敗しました。なぜ私は見ることができません。

<soa:Label xmlns:soa="urn:telestream.net:soa:core" identifier="ac7af7e5-a536-40ae-b7ca-93e62009c86a" name="Duration - Timecode to Frames" 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">00:15:52:[email protected] 
<soa:Default>00:00:00:[email protected]</soa:Default> 
<soa:IsRequired>false</soa:IsRequired> 
</soa:Parameter> 
<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">0 
<soa:Default>0</soa:Default> 
<soa:IsRequired>false</soa:IsRequired> 
</soa:Parameter> 
</soa:Label> 

:あなたはhttp://xsltransform.net/であなたのXSLTをテストしていた場合は、2がある

<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:analyze-string select="/soa:Label/soa:Parameter[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:variable name="total-frames" select="$hours * 60 * 60 * $fps + $minutes * 60 * $fps + $seconds * $frames + $frames"/> 
</xsl:matching-substring> 
</xsl:analyze-string> 
<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" xmlns:soa="urn:telestream.net:soa:core"> 
<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="/soa:Label/soa:Parameter[1]"/> 
<soa:Default>00:00:00:[email protected]</soa:Default> 
<soa:IsRequired>false</soa:IsRequired> 
</soa:Parameter> 
<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> 
</xsl:template> 
</xsl:stylesheet> 

おかげ

答えて

0

が表示されます

任意のアドバイスは

ソースXMLを高く評価しましたXSLTのエラー

  1. 要素xsl:analyze-stringはあなたが
    このxsl:analyze-stringtotal-frames変数が定義されているが、それはそれだけで xsl:matching-substringブロックとスコープ内にあることを意味
    xsl:stylesheet
  2. の子であることを許可されていないので、それを参照することはできませんelse ここで。

あなたがする必要がどのような具体的な詳細

ためhttp://xsltransform.net/pPzifqjを参照してくださいxsl:analyze-stringを移動するだけでなく、変数は、テンプレートの後半で使用することができるように、その周りtotal-framesxsl:variable宣言をラップです。

<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:[email protected]</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> 
    </xsl:template> 
</xsl:stylesheet> 

このXSLTを試してみてくださいあなたは、これはあまりにもテキスト内の改行、および空白ノードが含まれているだろうので、あなたの正規表現がマッチしなかったであろうsoa:Parameter[1]を選択した場所にも注意してください。

これは、最初のものに基づいて2番目のパラメータにテキスト値を追加しようとしているようです。その場合は、XSLT IDテンプレートを使用すると便利です。 TIM-cは御馳走を作品@

<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:Parameter[2]"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*"/> 
      <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:apply-templates select="*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 
+0

おかげで非常に多く、このXSLTを試してみてください。 バリデーターサイトへのリンクありがとう、非常に便利です – azz2912

関連する問題