Ваше текущее выражение получает позицию всех элементов tr
(поскольку ось предка относится только к элементу table
).
Если вы хотите указать позицию родителя tr
, возможно,Проще всего установить переменную, содержащую позицию перед xsl:for-each
, например:
<xsl:template match="tr">
<xsl:variable name="pos" select="position()" />
<xsl:for-each select=".">
<tps:context id="{$pos}" type="{translate(td[2],' ','')}">
<tps:image>
<xsl:value-of select="'../../../Images/Wind_1.eps'"/>
</tps:image>
</tps:context>
</xsl:for-each>
</xsl:template>
Это предполагает, что вы зачистите пробел с помощью xsl:strip-space
или выполните <xsl:apply-templates select="tr />"
, чтобыИзбегайте включения пробельных узлов в число. Если вы не удаляете пробелы и выполняете команду <xsl:apply-templates />
при размещении на родительском элементе table
, тогда будут выделяться пробельные текстовые узлы между элементами tr
, и это влияет на результат функции position()
.
В качестве альтернативы, измените переменную на:
<xsl:variable name="pos">
<xsl:number />
</xsl:variable>
Сказав это, я не уверен в необходимости xsl:for-each select"."
. Вы можете просто сделать это (опять же с предположением, что пробелы были удалены).
<xsl:template match="tr">
<tps:context id="{position()}" type="{translate(td[2],' ','')}">
<tps:image>
<xsl:value-of select="'../../../Images/Wind_1.eps'"/>
</tps:image>
</tps:context>
</xsl:template>
См. Это в действии на http://xsltfiddle.liberty -development.net / bFWR5DX (обратите внимание на использованиеxsl:strip-space
в XSLT).
Или, если вы не удаляете пробелы, сделайте это
<xsl:template match="tr">
<xsl:variable name="pos">
<xsl:number />
</xsl:variable>
<tps:context id="{$pos}" type="{translate(td[2],' ','')}">
<tps:image>
<xsl:value-of select="'../../../Images/Wind_1.eps'"/>
</tps:image>
</tps:context>
</xsl:template>
См. это в действии на http://xsltfiddle.liberty -развитии. нетто / bFWR5DX / 1