2016-06-14 106 views
1

我只是想寫一個XSL 1.0代碼(用XSLT轉換XML),它允許我根據低級別屬性給出屬性值。 爲了更清楚些,一個例子可能是有用的:根據屬性獲取較高的XML節點值

<age_list> 
    <age i="13"> 
    <type j="min"/> 
    </age> 
    <age i="22"> 
    <type j="max"/> 
    <age_list> 
</age_list> 

所以,我想提取年齡的屬性我,但我需要知道它是否是一個最低或最高年齡的,例如,一些電影被禁止對於18歲以下的孩子,但推薦年齡爲12歲。 所以每部電影都有一個年齡列表,但不是每個年齡列表都包含最小和最大年齡,有時候只有最大值,有時只是最小值,有時甚至是兩者。 如果未給出最小值,那麼它會自動設置爲0,而如果未給出,則最大值設置爲999。 那麼,我怎麼能做到這一點?

我經歷了所有年齡列表進行迭代,並做如下測試:

<xsl:choose> 
    <xsl:when test="./age/type[@j='MIN']"> 
     <xsl:value-of select="./age/@j" /> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:text>0</xsl:text> 
    </xsl:otherwise> 
</xsl:choose> 
<xsl:choose> 
    <xsl:when test="./age/type[@j='MAX']"> 
     <xsl:value-of select="./age/@j" /> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:text>999</xsl:text> 
    </xsl:otherwise> 
</xsl:choose> 

但它讓我的最大值和最小值,我指的是目前的年齡,而不是根據屬性這聽起來邏輯相同的值類型j。

回答

0

XML和XSLT區分大小寫。在XML中,您的j屬性的值爲min,但在您的XSLT中,您正在尋找不同的MIN

此外,對於給定類型的age屬性代碼第一次測試,但xsl:when不會改變當前的背景下,這意味着當你做<xsl:value-of select="./age/@j" />您是剛開始的第一個age元素,而不是一個與所需的類型。

試試這個:

<xsl:choose> 
    <xsl:when test="age[type/@j='min']"> 
     <xsl:value-of select="age[type/@j='min']/@i" /> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:text>0</xsl:text> 
    </xsl:otherwise> 
</xsl:choose> 
<xsl:choose> 
    <xsl:when test="age[type/@j='max']"> 
     <xsl:value-of select="age[type/@j='max']/@i" /> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:text>999</xsl:text> 
    </xsl:otherwise> 
</xsl:choose> 

你可能避免與可變

<xsl:variable name="min" select="age[type/@j='min']" /> 
<xsl:choose> 
    <xsl:when test="$min"> 
     <xsl:value-of select="$min/@i" /> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:text>0</xsl:text> 
    </xsl:otherwise> 
</xsl:choose> 

<xsl:variable name="max" select="age[type/@j='max']" /> 
<xsl:choose> 
    <xsl:when test="$max"> 
     <xsl:value-of select="$max/@i" /> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:text>999</xsl:text> 
    </xsl:otherwise> 
</xsl:choose> 
+0

謝謝你,先生反覆表達!這很流利!我是XSLT的新手,這就是爲什麼我不知道如何達到特定的節點屬性和值。思維方式與編程java或類似的東西有很大不同。 – BlackACE