2017-04-25 13 views
0

xslt v2を使用して入力ファイルに基づいて各月の日付を取得する必要があります。ここに私のサンプルデータです:xsltを使用して毎月の日付を取得する

<Data> 
    <Field>March/02/2017/February/16/1989/December/19/2015</Field> 
</Data> 

マイXSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0"> 
<xsl:output method="xml" indent="yes"/> 
<xsl:template match="Data"> 
    <xsl:copy> 
     <xsl:apply-templates/> 
    </xsl:copy> 
</xsl:template> 
<xsl:variable name="months" select="'January','February','March','April','May','June','July','August','September','October','November','December'"/> 
<xsl:template match="Field"> 
    <xsl:variable name="Output"> 
     <xsl:analyze-string select="normalize-space(.)" regex="([A-Z][a-z]+)"> 
      <xsl:matching-substring> 
       <xsl:number value="index-of($months, regex-group(1))" format="01"/> 
      </xsl:matching-substring> 
     </xsl:analyze-string> 
    </xsl:variable> 
    <Result> 
     <xsl:value-of select="$Output"/> 
    </Result> 
</xsl:template> 
</xsl:stylesheet> 

生成される出力

<Data> 
    <Result>030212</Result> 
</Data> 

生成される出力は、各月の位置ですが、私は移入したいです毎月の後の日付。このような:

<Data> 
    <March>02/2017</March> 
    <February>16/1989</February> 
    <December>19/2015</December> 
</Data> 

また、私はテストファイルで月がアッパーまたは小文字である場合、それは出力を移入していない問題を抱えています。私

あなたが私を助けることを願っています。ありがとうございました。

+0

出力が生成したい出力は、プロセスに恐ろしいことになるだろう。あなたは本当にこのフォーマットを作りたいと思いますか? –

+0

はい、これは生成する必要があります。しかし、出力要素名は一例に過ぎません。 – Charlotte

答えて

1

私は$monthsindex-of()の理由を理解していません。すべてが既にFieldにあるようです。

例...

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

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

    <xsl:template match="Field"> 
    <xsl:analyze-string select="normalize-space()" regex="(\w+)/(\d{{2}}/\d{{4}})"> 
     <xsl:matching-substring> 
     <xsl:element name="{regex-group(1)}"> 
      <xsl:value-of select="regex-group(2)"/> 
     </xsl:element> 
     </xsl:matching-substring> 
    </xsl:analyze-string> 
    </xsl:template> 

</xsl:stylesheet> 

<Data> 
    <March>02/2017</March> 
    <February>16/1989</February> 
    <December>19/2015</December> 
</Data> 
関連する問題