2017-06-20 14 views
-3

ここに私のコードのスニペットがあります。入力には2つのオプションのフィールドが含まれているはずです。フィールドが存在するかどうかに応じてURLが異なる必要があるため、4つのifステートメントを作成すると考えました。選択時と選択時、および最初のIF文が機能します。しかし、フィールドの1つまたは両方が入力にない場合、最後の3つが爆発します。 URL変数(DVURL)はまったく入力されません。私はこれが簡単な答えだと確信しています...私は望みます。単純なXSLTネストされたIFステートメント

<?xml version="1.0" encoding="UTF-8"?> 

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:func="http://exslt.org/functions" xmlns:date="http://exslt.org/dates-and-times" xmlns:string="http://symphony-cms.com/functions" xmlns:dpfunc="http://www.datapower.com/extensions/functions"> 
    <xsl:output method="xml"/> 
    <xsl:template match="/"> 
     <xsl:variable name="datavalueagg" select="test1"/> 
     <xsl:variable name="valueagg" select="test2"/> 
     <xsl:variable name="variable1" select="Y"/> 
     <xsl:choose> 
      <xsl:when test="($variable1 = 'Y' or $variable1 = 'N')"> 
       <xsl:if test="(($datavalueagg != '') and ($valueagg != ''))"> 
        <xsl:variable name="DVURL" select="concat('http://server.com/$valueagg/$datavalueagg')"/> 
       </xsl:if> 
       <xsl:if test="(($datavalueagg != '') and ($valueagg = ''))"> 
        <xsl:variable name="DVURL" select="concat('http://server.com/$datavalueagg')"/> 
       </xsl:if> 
       <xsl:if test="$datavalueagg = '' and $valueagg != ''"> 
        <xsl:variable name="DVURL" select="concat('http://server.com/$valueagg')"/> 
       </xsl:if> 
       <xsl:if test="$datavalueagg = '' and $valueagg = ''"> 
        <xsl:variable name="DVURL" select="concat('http://server.com/none')"/> 
       </xsl:if> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:variable name="DVURL" select="concat('http://server.com/all')"/> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 
</xsl:stylesheet> 
+3

擬似コードではなく実際の[mcve]を表示します。特に、変数定義の 'select'式のいくつかは有効なXPath式ではありません。実際の表現の詳細は質問に関連しており、入力XMLも可能です。一般的に、私たちはあなたの(最小限の例)問題を再現できるようにしたいと考えています。 –

+0

編集は受け入れ可能ですか? – czah

+1

編集は問題を改善しますが、あなたはまだMCVEを提供しません。特に、入力例と期待出力が必要です。詳細については、私が提供したリンクに従ってください。現在提示されているXSLにはいくつかの奇妙な違いがありますが、実際のXMLに特徴的かどうかは不明です。 –

答えて

-2

貧困問題のため申し訳ありませんが、私は少し変更されたコードを使用。今働いている。

<?xml version="1.0" encoding="UTF-8"?> 

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:func="http://exslt.org/functions" xmlns:date="http://exslt.org/dates-and-times" xmlns:string="http://symphony-cms.com/functions" xmlns:dpfunc="http://www.datapower.com/extensions/functions"> 
    <xsl:output method="xml"/> 
    <xsl:template match="/"> 
     <xsl:variable name="datavalueagg" select="test1"/> 
     <xsl:variable name="valueagg" select="test2"/> 
     <xsl:variable name="variable1" select="Y"/> 
     <xsl:choose> 
      <xsl:when test="($variable1 = 'Y' or $variable1 = 'N')"> 
       <xsl:choose> 
        <xsl:when test="(string-length($datavalueagg) != 0 and string-length($valueagg) != 0)"> 
         <xsl:variable name="DVURL" select="concat('http://server.com/$valueagg/$datavalueagg')"/> 
        </xsl:when> 
        <xsl:when test="(string-length($datavalueagg) != 0 and string-length($valueagg) != 0)"> 
         <xsl:variable name="DVURL" select="concat('http://server.com/$datavalueagg')"/> 
        </xsl:when> 
        <xsl:when test="(string-length($datavalueagg) != 0 and string-length($valueagg) != 0)"> 
         <xsl:variable name="DVURL" select="concat('http://server.com/$valueagg')"/> 
        </xsl:when> 
        <xsl:when test="(string-length($datavalueagg) != 0 and string-length($valueagg) != 0)"> 
         <xsl:variable name="DVURL" select="concat('http://server.com/none')"/> 
        </xsl:when> 
        <xsl:otherwise/> 
       </xsl:choose> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:variable name="DVURL" select="concat('http://server.com/all')"/> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 
</xsl:stylesheet> 
+1

入力を見ずに達成しようとしていることを理解することなく、これは誰にも役立たない。 –

+1

それでは、 ''のネストではなく、 ''テストをネストしました。これはあなたが作った唯一の変更だったのでしょうか、私たちが見ることのできないどこか他の部分を編集しましたか? –

関連する問題