2012-01-26 35 views
2

我需要把下面的XML使用XSLT裹帶一個div值大於0的兩個節點

<item>0</item> 
<item>1</item> 
<item>2</item> 
<item>3</item> 
<item>0</item> 
<item>6</item> 

轉換成以下HTML

<div> 
    <i>1</i> 
    <i>2</i> 
</div> 

<div> 
    <i>3</i> 
    <i>6</i> 
</div> 

換句話說與0值刪除節點並每2個節點包與一個DIV

+0

你到目前爲止嘗試過什麼?這個網站有助於解決問題,它不是「給我codez」。 –

+0

我寫了我的問題。我可以分別完成這兩項任務,但不能在一起。我不認爲這會幫助你。 – tylik

+0

我的意思是,向我們展示您迄今爲止嘗試使用的xslt,這不起作用。如果你還沒有,那麼我們不會爲你做你的工作/工作。 –

回答

3

我會做這樣的:

<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

<xsl:param name="value" select="0"/> 

<xsl:strip-space elements="*"/> 
<xsl:output indent="yes"/> 

<xsl:template match="@* | node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="root"> 
    <xsl:copy> 
    <xsl:apply-templates select="item[not(. = $value)][position() mod 2 = 1]" mode="group"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="item" mode="group"> 
    <div> 
    <xsl:apply-templates select=". | following-sibling::item[not(. = $value)][1]"/> 
    </div> 
</xsl:template> 

</xsl:stylesheet> 
與輸入是

<root> 
<item>0</item> 
<item>1</item> 
<item>2</item> 
<item>3</item> 
<item>0</item> 
<item>6</item> 
</root> 

,那麼你得到的結果

<root> 
    <div> 
     <item>1</item> 
     <item>2</item> 
    </div> 
    <div> 
     <item>3</item> 
     <item>6</item> 
    </div> 
</root> 

如果你也想改造itemi元素簡單地添加模板

<xsl:template match="item"> 
    <i> 
    <xsl:apply-templates/> 
    </i> 
</xsl:template> 

在樣式表。

+0

謝謝你真的幫了我很多 – tylik