0
輸出中「can」元素的數量應等於輸入xml中「a」元素下「c」元素的出現次數。因此,第一次連續發生的「can」元素應該是3(因爲輸入中的a元素的第一個連續出現次數是3),並且根據輸入,「can」元素的下一個連續出現次數應該是2。然而,在我目前的輸出中,它總共重複了5次。我認爲下面這行應該改變,但不知道如何改變,嘗試使用position()。這是模板只適用於C第一(使用計數../)a,然後第二個a。xslt在使用計數函數的組下應用模板
行了,我認爲應該改變
<xsl:apply-templates select="/*/*[$coun]/c"/>
我輸入XML
<Root>
<a>
<b>12</b>
<c>1</c>
<c>2</c>
<c>3</c>
</a>
<a>
<b>12</b>
<c>a</c>
<c>c</c>
</a>
</Root>
我的XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<Root>
<xsl:apply-templates select="*/*/b"/>
</Root>
</xsl:template>
<xsl:template match="b">
<a>
<xsl:value-of select="../b"/>
</a>
<xsl:variable name="coun">
<xsl:value-of select="count(../preceding-sibling::a) + 1"/>
</xsl:variable>
<xsl:apply-templates select="/*/*[$coun]/c"/>
</xsl:template>
<xsl:template match="c">
<can>abc</can>
</xsl:template>
</xsl:stylesheet>
我的電流輸出
<Root>
<a>12</a>
<can>abc</can>
<can>abc</can>
<can>abc</can>
<can>abc</can>
<can>abc</can>
<a>12</a>
<can>abc</can>
<can>abc</can>
<can>abc</can>
<can>abc</can>
<can>abc</can>
</Root>
我的預期輸出
<Root>
<a>12</a>
<can>abc</can>
<can>abc</can>
<can>abc</can>
<a>12</a>
<can>abc</can>
<can>abc</can>
</Root>