2017-10-19 59 views
-1

有人能告訴我我做錯了什麼嗎?當<xsl:value-of select="string-length(add:Destinations/add:DestinationName)" /> =加利福尼亞州薩克拉門託我期望可變區域是西部,但我得到東部。XSLT選擇不工作

<xsl:variable name="charCount"> 
    <xsl:value-of select="string-length(add:Destinations/add:DestinationName)" /> 
</xsl:variable> 
<xsl:variable name="amendedCharCount"> 
    <xsl:value-of select="$charCount - 2"/> 
</xsl:variable> 
<xsl:variable name="state"> 
    <xsl:value-of select="substring(add:Destinations/add:DestinationName,$amendedCharCount)"/> 
</xsl:variable> 
<xsl:variable name="region"> 
    <xsl:choose> 
    <xsl:when test="$state='CA'">west</xsl:when> 
    <xsl:otherwise>east</xsl:otherwise> 
    </xsl:choose> 
</xsl:variable>  
<xsl:element name="OperationsRegion"> 
    <xsl:value-of select="$region"/> 
</xsl:element>  
+0

你真的應該在問題中發佈你的輸入XML。謝謝。 –

回答

0

在XSLT/XPath中,字符串中的字符的索引是基於1而不是0爲主。所以,與其這樣做(這實際上將獲得最後三個字符)

<xsl:variable name="amendedCharCount"><xsl:value-of select="$charCount - 2"/></xsl:variable> 

做到這一點....

<xsl:variable name="amendedCharCount"><xsl:value-of select="$charCount - 1"/></xsl:variable> 

或者更好的是,這樣做....

<xsl:variable name="amendedCharCount" select="$charCount - 1"/> 

也許,如果你所有的目的地都有相同的格式,你也可以將這三個表達式簡化爲一個?如果目的地名稱中只有一個逗號,這將起作用。

<xsl:variable name="state" select="substring-after(add:Destinations/add:DestinationName, ', ')" /> 
+0

完美地工作。比我所做的更簡單的解決方案。非常感謝! – Bob

+0

而且 - 謝謝你爲什麼這不起作用的解釋。我現在看到我的錯誤。 – Bob