2012-10-04 19 views
-2

下面是一個很好的例子,但是我怎樣才能動態地存儲數值....你能解釋一下嗎?如何使用XSLT動態存儲數組中的值並比較值?

<xsl:variable name="countries" select="'EG, KSA, UAE, AG'" /> 
    <xsl:variable name="country" select="'KSA'" /> 
    <xsl:choose> 
     <xsl:when test=" 
     contains(
     concat(', ', normalize-space($countries), ', ') 
     concat(', ', $country, ', ') 
     ) 
    "> 
<xsl:text>IN</xsl:text> 
</xsl:when> 
<xsl:otherwise> 
<xsl:text>OUT</xsl:text> 
</xsl:otherwise> 

不好看....我有一些其他的要求。你可以看看這個嗎?

<xml> 
    <test> 
    <BookID> 
     0061AB 
    </BookID> 
    <amount> 
     16 
    </amount> 
    </test> 
    <test> 
    <BookID> 
     0062CD 
    </BookID> 
    <amount> 
     2 
    </amount> 
    </test> 
    <test> 
    <BookID> 
     0061AB 
    </BookID> 
    <amount> 
     2 
    </amount> 
    </test> 
</xml> 

這裏根據的BookID的相等值,我要添加的量值.....像上述例子中,如果的BookID的值是0061AB,然後量的值應爲18

+2

尚不清楚是什麼問題?請編輯並給我們一個你想要實現的例子。 –

+2

您在低層機制方面考慮得太多。如果您可以向我們解釋您希望轉換所做的事情(而不是您想用來編寫它的機制),那麼您將更接近XSLT的編寫方式。 –

回答

0

正如其他人所提到的,您的問題並不十分清楚,但您可以使用呼叫模板在包含候選國家和搜索列表的XML文檔中重複使用「國家/地區查找」算法(您也可以使用document將候選和搜索目標加載到單獨的xml文檔中)

eg應用XSLT時:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 

    <xsl:template match="/xml"> 
    <xsl:apply-templates select="test"/> 
    </xsl:template> 

    <xsl:template match="test"> 
    <xsl:call-template name="FindCountry"> 
     <xsl:with-param name="countries" select="normalize-space(countries/text())"/> 
     <xsl:with-param name="country" select="normalize-space(country/text())"/> 
    </xsl:call-template> 
    </xsl:template> 

    <xsl:template name="FindCountry" xml:space="default"> 
    <xsl:param name="countries" /> 
    <xsl:param name="country" /> 
    Is <xsl:value-of select="$country" /> in <xsl:value-of select="$countries" /> ? 
    <xsl:choose> 
     <xsl:when test="contains(concat(', ', $countries, ', '), 
           concat(', ', $country, ', '))"> 
     <xsl:text>IN</xsl:text> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:text>OUT</xsl:text> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:template> 
</xsl:stylesheet> 

要將XML

<xml> 
    <test> 
    <countries> 
     EG, KSA, UAE, AG 
    </countries> 
    <country> 
     UAE 
    </country> 
    </test> 
    <test> 
    <countries> 
     GBR, USA, DE, JP 
    </countries> 
    <country> 
     AUS 
    </country> 
    </test> 
</xml> 

結果

Is UAE in EG, KSA, UAE, AG ? IN 
Is AUS in GBR, USA, DE, JP ? OUT 
+0

看起來不錯...我再次向你提供這樣的要求。 0061AB 這裏據平等價值,我想補充的值.....像上面的例子,如果值0061AB,那麼的值應該是18. – Dipta

+0

@Dipta我不明白這個新要求嗎?你想添加常量'2'到現有值嗎?這是與你原來的問題有關嗎,還是這是一個新問題? – StuartLC

+0

我又添加了這個要求......請檢查 – Dipta