我是XML / XSL的新手,所以我会尝试尽可能具有描述性。我有一个XML元素,我需要填充一个值,给出一个数字,每次找到该元素时,该数字会递增。
这是我到目前为止所拥有的:
<?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的数字?
答案 0 :(得分:2)
您使用<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>