2012-06-26 113 views
2

來源:拆分變量的值XSLT

<Data> 
    <value>M1,M2,M3,M4,M5,M6</value> 
    </Data> 

需要顯示他們作爲

輸出:

<ABCD> 
     <value1>M1</value1> 
     <value2>M2</value2> 
     <value3>M3</value3> 
     <value4>M4</value4> 
     <value5>M5</value5> 
     <value6>M6</value6> 
    </ABCD> 

XSLT:

其實我是想分裂基於「,」的值,並將它們置於不同的變量中。 使用str-split(),我可以加載它在不同的變量。

回答

3

這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:template match="/*"> 
    <ABCD> 
    <xsl:apply-templates/> 
    </ABCD> 
</xsl:template> 

<xsl:template match="value/text()" name="split"> 
    <xsl:param name="pText" select="."/> 
    <xsl:param name="pOrd" select="1"/> 

    <xsl:if test="$pText"> 
    <xsl:element name="value{$pOrd}"> 
     <xsl:value-of select= 
     "substring-before(concat($pText, ','), ',')"/> 
    </xsl:element> 

    <xsl:call-template name="split"> 
     <xsl:with-param name="pText" select="substring-after($pText, ',')"/> 
     <xsl:with-param name="pOrd" select="$pOrd+1"/> 
    </xsl:call-template> 
    </xsl:if> 
</xsl:template> 
</xsl:stylesheet> 

當所提供的XML文檔應用:

<Data> 
    <value>M1,M2,M3,M4,M5,M6</value> 
</Data> 

產生想要的,正確的結果

<ABCD> 
    <value1>M1</value1> 
    <value2>M2</value2> 
    <value3>M3</value3> 
    <value4>M4</value4> 
    <value5>M5</value5> 
    <value6>M6</value6> 
</ABCD> 

說明

  1. 遞歸命名模板,用停止狀態時,通過文本參數成爲空字符串。

  2. 正確使用xsl:elementAVT

  3. 正確使用的標準XPath函數substring-before()substring-after

  4. 正確使用的sentinel爲了簡化代碼,並使其更有效。

+0

謝謝你的回答 – Patan

+0

@ User222:不客氣。 –

0

如果您有權訪問EXSLT,則可以使用str:split()

<xsl:apply-templates select='str:split(/Data/value, ",")' /> 

Runnable example here