2016-07-26 2 views
1

私は、ポリシーレコード内の1つまたは複数の資金をループし、コードTVFIR1を持つレコードを見つけ、そのレコードの金利を使用する必要がある状況があります。これは、XMLレコードの超簡易版である:XSLのループを中断する

<Policy> 
    <PolicyNumber>123456789</PolicyNumber> 
    <PolicyOwner>John Doe</PolicyOwner> 
    <Fund> 
     <FundCode>TVSPM3</FundCode> 
     <InterestRate>0</InterestRate> 
    </Fund> 
    <Fund> 
     <FundCode>TVFIR1</FundCode> 
     <InterestRate>0.025</InterestRate> 
    </Fund> 
    <Fund> 
     <FundCode>TVMDP5</FundCode> 
     <InterestRate>0</InterestRate> 
    </Fund> 
</Policy> 

これは私が擬似コードで実現することを目指していますものです:

For each fund 
    If the fund code = ‘TVFIR1 Then 
    Get its interest rate 
    Break out of the loop 
    Else 
    Interest rate = 0 
    End If 

次基金レコード

私が使用したいロジックfor-eachループから抜け出せないので、XSLではサポートされていません(手続き型言語ではありません)。

答えて

1

なぜ1つの式でループできるのですか?私はこのXPATHがあなたのために働くだろうと信じて:FundCodeが存在しない場合は「TVFIR1」または数0である利率の値を選択することになる

/Policy/Fund[FundCode='TVFIR1']/InterestRate || number(0) 

。それを変数の値として使用してください。

+0

これは有効なXPath式ではありません。 –

+0

私はあなたがXPath 2.0の表現 '(/ Policy/Fund [FundCode = 'TVFIR1'] [1]/InterestRate、0)[1]' –

+0

を私はいつも信じると確信していますそのXpath in Oxygen(2.0)は、FundCodeをさまざまな値に変更してエラーを起こさず、うまくいくように見えました。 –

1

私はあなたがそれをこのようにしてみてくださいことをお勧めしたい:

<xsl:template match="/Policy"> 
    <!-- other stuff --> 
    <xsl:variable name="fund" select="Fund[FundCode='TVFIR1']" /> 
    <xsl:choose> 
     <xsl:when test="$fund"> 
      <xsl:value-of select="$fund/InterestRate"/> 
     </xsl:when> 
     <xsl:otherwise>0</xsl:otherwise> 
    </xsl:choose> 
    <!-- more stuff --> 
</xsl:template> 

これはXSLT 1.0を使用していると仮定しています。


あなたがXSLT 2.0を使用している場合は、これを短縮することができます。

<xsl:template match="/Policy"> 
    <!-- other stuff --> 
    <xsl:variable name="fund" select="Fund[FundCode='TVFIR1']" /> 
    <xsl:value-of select="if ($fund) then $fund/InterestRate else 0"/> 
    <!-- more stuff --> 
</xsl:template> 

私が最初にクールに見えるかもしれませんが、「賢い」のトリックを避けるために、あなたに助言するが、(あなたの費用がかかりますまたはあなたの後継者)の後で、彼らは正確に何を解読しようとします。

あなた自身が指摘しているように、これは「if then else」問題です。ソリューションが少し冗長であるように見えても、そのように解決する必要があります。

関連する問題