2014-05-13 64 views
0

我對XML/XSL相當陌生,因此我會盡可能描述一下。我有一個XML元素,我需要用它來填充一個值,每次找到元素時都會增加一個數字。XSL在每次模板運行時都會自動增加一個數字

這是我到目前爲止有:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:variable name="count"> 
    <xsl:number level="any" value="position()"/> 
</xsl:variable> 

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

<xsl:template name="index"> 
    <xsl:param name="counter" select="''"/> 
    <xsl:value-of select="$count"/> 
</xsl:template> 

<xsl:template match="//file_item_nbr"> 
    <file_item_nbr> 
     <xsl:call-template name="index"> 
      <xsl:with-param name="counter" select="''"> 
       <!--<xsl:value-of select="$count + 1"/--> 
      </xsl:with-param> 
     </xsl:call-template> 
    </file_item_nbr> 
</xsl:template> 
</xsl:stylesheet> 

的XML數據有多種嵌套元素file_item_nbr標籤。這就是爲什麼模板使用// file_item_nbr xpath匹配所有file_item_nbr元素的原因。

如何增加每個file_item_nbr的編號?

回答

1

您在<xsl:number level="any"/>的正確軌道上,但您需要在每次需要時評估此說明。目前你正在評估它一次,將結果存儲在一個變量中,然後每次插入該預計算值。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

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

    <xsl:template match="file_item_nbr"> 
    <file_item_nbr> 
     <xsl:number level="any"/> 
    </file_item_nbr> 
    </xsl:template> 
</xsl:stylesheet> 
+0

非常感謝!對於這麼簡單的事情,我有很多麻煩。一本或兩本關於XML/XSL的書不會傷害讀者。 –

+0

我喜歡這個答案,因爲它爲我提供了正確的解決方案。然而,我現在有一個困境,因爲我必須做兩次轉換才能完全按照它應該得到我的XML數據。如果原始xml數據中存在單個元素,有沒有辦法將變量增加x倍? 例如,我的XML數據包含一個根元素,其他所有內容都是其中的一個子元素。我的第一個轉換將數據格式化爲嵌套元素,並在這種特定情況下創建file_item_nbr的MANY元素,即使XML數據僅包含單個元素。 –

相關問題