2011-11-07 28 views
1

我需要編寫一個XSLT模板來標識一串數字。我怎樣才能做到這一點?用於識別奇數/偶數的XSLT模板?

+0

您可以發佈您使用的傳入XML嗎? – ssamuel

+0

哪個版本的XSLT和您期望輸出的內容? –

+0

好問題,+1。 XPath'mod'運算符是你的朋友。 Tokenization與使用XPath 2.0/XSLT 2.0的'tokenize()'或XSLT 1.0中的遞歸調用命名模板一樣簡單。 –

回答

1

XSLT 1.0溶液

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 
<xsl:param name="pNumbers" select="'2,23,12,251'"/> 

<xsl:template match="/"> 
    <xsl:call-template name="classify"/> 
</xsl:template> 

<xsl:template name="classify"> 
    <xsl:param name="pNums" select="$pNumbers"/> 

    <xsl:if test="string-length($pNums)"> 
    <xsl:variable name="vN" select= 
    "substring-before(concat($pNums, ','), ',')"/> 
    <num odd="{$vN mod 2 = 1}"> 
    <xsl:value-of select="$vN"/> 
    </num> 

    <xsl:call-template name="classify"> 
    <xsl:with-param name="pNums" select= 
    "substring-after($pNums, ',')"/> 
    </xsl:call-template> 
    </xsl:if> 
</xsl:template> 
</xsl:stylesheet> 

當這種轉化是在任何XML文檔(未使用)施加,有用的,正確的分類是生產

<num odd="false">2</num> 
<num odd="true">23</num> 
<num odd="false">12</num> 
<num odd="true">251</num> 
2

要將字符串拆分爲數字序列,請在XSLT 2.0中使用tokenize(),或者在XSLT 1.0中使用EXSLT str:tokenize。測試多個$ N是偶數,則使用$N mod 2 = 0

+0

好的'mod'語法。 –