2017-06-20 77 views
-3

這是我的代碼片段。輸入現在應該包含2個可選字段。所以我想創建4個if語句,因爲如果字段存在或不存在,URL必須不同。作品的選擇/時間,以及第一個IF語句的作品。但是,如果其中一個或兩個字段不在輸入中,則最後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

因此,它現在的作品,你嵌套''測試而不是嵌套''?這是你做的唯一改變還是你編輯了我們看不到的其他地方? –