2017-04-18 13 views
0

私はXSLTの専門家ではありません。私はすべての "コード"の値をチェックし、以下の規則に従ってステータスコードを設定する必要があります。各要素のXSLTチェック値と要素の設定値

  1. 全てのコード値が200である場合、200からstatusCodeを設定し、全てのコード値が200から200または204は、設定されたステータスコードのいずれかであるとのreasonPhraseが持っているすべての理由のconcatnatiopn場合成功
  2. へのreasonPhrase 200
  3. 以外のコード少なくとも1つのコードが200以外の値と204が含まれている場合、503にからstatusCodeを設定してのreasonPhrase私はのカップルを試みた200

以外のコードを持っているすべての理由のconcatnatiopnありますすべてのコード値を1つのvarに格納する方法iableとexeceuteには、上記の条件に加えてコード変数を作成して値を格納し、文字列の長さをチェックする機能が含まれています。しかし、私は成功を収めていませんでした。

私は、この要件が複雑なxsltの一部であり、以下は要件の例であるため、できるだけ一般的な方法を探しています。 私は以下のコードのための論理を取得すると、私は複雑なxsltに論理を収めることができるはずです。

また、回答で検索しようとしましたが、この要件に適合する解決策は見つかりませんでした。 XSLTの他の部分は、XSLT 1.0

入力で書かれているように私は、XSLT 1.0で解決策を探しています

-

  <root> 
       <Node1> 
         <code>200</code> 
         <reason>Success</reason> 
       </Node1> 
       <Node1> 
         <code>200</code> 
         <reason>Success</reason> 
       </Node1> 
       <Node1> 
         <code>204</code> 
         <reason>Business Error</reason> 
       </Node1> 
       <Node1> 
         <code>500</code> 
         <reason>Tech Error</reason> 
       </Node1> 
       <Node1> 
         <code>200</code> 
         <reason>Success</reason> 
       </Node1> 
      </root> 

出力 -

  <root> 
      <output> 
       <statuscode></statuscode> 
       <reasonphrase></reasonphrase> 
      </output> 
      </root> 

ありがとうございました。

+1

"xsltの他の部分がxslt 1.0で書かれているので、私はxslt 1.0で解決策を探しています。" - それは実際には非常に良い理由ではありません。これは、アプリの他の部分がJDK 1.4を使用しているため、JDK 1.4を固執するようなものです。 XSLT 1.0は、JDK 1.4よりもずっと長い間古くなっています。 –

+0

はい、私は同意します。しかし、XSLTはTIBCOコードに統合される予定です。 TIBCOコード全体と比較すると、わずか10%です。だから、プロジェクトチームはxslt 1.0で大丈夫です。 ご返信ありがとうございます。 – Nilay

答えて

0

あなたの出発点としてこれを試してみてください。これは、コードを繰り返し排除するために合理化することができることを

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/root"> 
    <xsl:copy> 
     <output> 
      <xsl:choose> 
       <xsl:when test="not(Node1[code!=200])"> 
        <!-- all code values are 200 --> 
        <statuscode>200</statuscode> 
        <reasonphrase>success</reasonphrase> 
       </xsl:when> 
       <xsl:when test="not(Node1[code!=200 and code!=204])"> 
        <!-- all code values are either 200 or 204 --> 
        <statuscode>200</statuscode> 
        <reasonphrase> 
         <xsl:for-each select="Node1[code!=200]"> 
          <xsl:value-of select="code"/> 
          <xsl:if test="position()!=last()"> 
           <xsl:text> </xsl:text> 
          </xsl:if> 
         </xsl:for-each> 
        </reasonphrase> 
       </xsl:when> 
       <xsl:otherwise> 
        <statuscode>503</statuscode> 
        <reasonphrase> 
         <xsl:for-each select="Node1[code!=200]"> 
          <xsl:value-of select="code"/> 
          <xsl:if test="position()!=last()"> 
           <xsl:text> </xsl:text> 
          </xsl:if> 
         </xsl:for-each> 
        </reasonphrase> 
       </xsl:otherwise> 
      </xsl:choose> 
     </output> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

注 - しかし、ここでのポイントは、テストする方法を示すことです与えられた条件のために。

関連する問題