我有一個值列表,需要能夠檢查是否存在重複,如果是這樣,我需要在第一個重複後添加一個「1」,一個「2」後第二次重複。XSLT 1.0 - 添加一個特定的序列號到一個重複的值
我的XML看起來是這樣的:
<?xml version="1.0" encoding="UTF-8"?>
<data xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" language="nl_NL" timezone="Europe/Paris">
<Declaration wayBillNumber="102956715"/>
<Declaration wayBillNumber="102956715"/>
<Declaration wayBillNumber="151975168"/>
<Declaration wayBillNumber="152003915"/>
<Declaration wayBillNumber="152005173"/>
<Declaration wayBillNumber="152005964"/>
<Declaration wayBillNumber="152011491"/>
<Declaration wayBillNumber="152011491"/>
<Declaration wayBillNumber="183875206"/>
<Declaration wayBillNumber="204305618"/>
<Declaration wayBillNumber="152011491"/>
<Declaration wayBillNumber="210642574"/>
</data>
輸出應該是這樣的:
<?xml version="1.0" encoding="UTF-8"?>
<data xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" language="nl_NL" timezone="Europe/Paris">
<Declaration wayBillNumber="102956715"/>
<Declaration wayBillNumber="102956715-1"/>
<Declaration wayBillNumber="151975168"/>
<Declaration wayBillNumber="152003915-2"/>
<Declaration wayBillNumber="152005173"/>
<Declaration wayBillNumber="152005964"/>
<Declaration wayBillNumber="152011491"/>
<Declaration wayBillNumber="152011491-1"/>
<Declaration wayBillNumber="183875206"/>
<Declaration wayBillNumber="204305618"/>
<Declaration wayBillNumber="152011491-2"/>
<Declaration wayBillNumber="210642574"/>
</data>
我看到,如果出現重複和然後用它做點什麼,但我似乎無法找到的是如何添加序列號它。當我使用下面的行時,每個重複值後面只加「-1」。
<xsl:attribute name="wayBillNumber">
<xsl:choose>
<xsl:when test="preceding::*/Declaration/@wayBillNumber=current()/Declaration/@wayBillNumber"><xsl:value-of select="Declaration/@wayBillNumber"/>-<xsl:value-of select="count((.|preceding-sibling::Declaration/@wayBillNumber)[not(Declaration/@wayBillNumber = preceding-sibling::Declaration/@wayBillNumber)])"/></xsl:when>
<xsl:otherwise><xsl:value-of select="Declaration/@wayBillNumber"/></xsl:otherwise>
</xsl:choose>
</xsl:attribute>
我只能使用XSLT 1.0。任何幫助,將不勝感激。
輸出的順序是否重要?如果沒有,我建議你做[適當的分組](http://www.jenitennison.com/xslt/grouping/muenchian.html),然後使用'position()'函數爲每個組中的項目編號。 –
P.S.這個要求有一些非常「錯誤的」:如果'wayBillNumber'值很重要,那麼你不應該修改它們。相反,您應該向「聲明」中添加其他屬性,並使用整體唯一值填充它 - 而不考慮「wayBillNumber」序列。 OTOH,如果'wayBillNumber'的值可以被修改,那麼爲什麼不簡單地爲它們的所有**添加一個整體唯一值呢? –
是的,我知道這一點。只是爲它們添加一個獨特的值將是最好的解決方案,但接收系統不會爲此改變它的數據模型,所以我只需做出正確的決定。 –