Помимо переписывания большого количества кода XSLT (чего я не собираюсь делать), существует ли способ найти позицию элемента внутри его родителя, когда контекст произвольно установлен на что-то еще? Вот пример:
<!-- Here are my records-->
<xsl:for-each select="/path/to/record">
<xsl:variable name="record" select="."/>
<!-- At this point, I could use position() -->
<!-- Set the context to the current record -->
<xsl:for-each select="$record">
<!-- At this point, position() is meaningless because it always 1 -->
<xsl:call-template name="SomeTemplate"/>
</xsl:for-each>
</xsl:for-each>
<!-- This template expects the current context being set to a record -->
<xsl:template name="SomeTemplate">
<!-- it does stuff with the record fields -->
<xsl:value-of select="SomeRecordField"/>
<!-- How to access the record position in /path/to or in any other path? -->
</xsl:template>
ПРИМЕЧАНИЕ.. Это упрощенный пример. У меня есть несколько ограничений, препятствующих реализации очевидных решений, таких как передача новых параметров в SomeTemplate
и т.д. Я действительно могу только изменить внутренние элементы SomeTemplate
.
ПРИМЕЧАНИЕ. Я использую Xalan 2.7.1 с EXSLT. Итак, эти трюки доступны
Любые идеи?