我在某些條件下增加計數器時出現問題。xslt有條件增量
輸入:
<Users>
<User>
<id>1</id>
<username>jack</username>
</User>
<User>
<id>2</id>
<username>bob</username>
</User>
<User>
<id>3</id>
<username>bob</username>
</User>
<User>
<id>4</id>
<username>jack</username>
</User>
</Users>
求購輸出:
<Users>
<User>
<id>1</id>
<username>jack01</username>
</User>
<User>
<id>2</id>
<username>bob01</username>
</User>
<User>
<id>3</id>
<username>bob02</username>
</User>
<User>
<id>4</id>
<username>jack02</username>
</User>
</Users>
爲了實現這一點下面的算法可用於:通過用戶名
- 排序輸入
- 當原有的用戶名是等於當前用戶名
- 增量計數器和
- 一套用戶名 '$用戶名$計數器'
- 否則
- 組計數器1
- 當原有的用戶名是等於當前用戶名
- (再次按id排序 - 並非真的有必要)
於是,我就變成XSLT這樣的:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="Users">
<Users>
<xsl:apply-templates select="create_user">
<xsl:sort select="User/username"/>
</xsl:apply-templates>
</Users>
</xsl:template>
<xsl:template match="create_user">
<id><xsl:value-of select="id"/></id>
<xsl:choose>
<xsl:when test="username=(preceding-sibling::User[1]//username)">
<xsl:variable name="count">
<xsl:number format="01"/>
</xsl:variable>
<username><xsl:value-of select="concat(username, $count)"/></username>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="count">
<xsl:number value="1" format="01"/>
</xsl:variable>
<username><xsl:value-of select="concat(username, $count)"/></username>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
然而,通過執行這個,我得到以下錯誤:
- 的用戶名不排序
- 計數器不會增加
- 而條件匹配計數器將成爲當前節點位置。
- 在我們的例子id爲節點= 3將具有用戶名= bob03
- 缺少標記
有什麼想法?
我很困惑 - 「輸出」是指你正在得到什麼或你會*想要得到什麼? – ABach
「輸出」確實指的是「通緝輸出」。 *編輯* – rednammoc