You can keep the variable as a sequence of elements and declare a
function like this:
<xsl:function name="my:index-of" as="xs:integer*">
<xsl:param name="seq" as="node()*"/>
<xsl:param name="nodes-in-question" as="node()*"/>
<xsl:sequence select="index-of(
for $s in $seq
return generate-id($s),
for $n in $nodes-in-question
return generate-id($n)
)"/>
</xsl:function>
If you’re using XSLT 3 you can use $seq ! generate-id() etc. for brevity.
Then my:index-of($headings, .) will give you the position of the context
node within the sequence of headings.
Gerrit
On 02.05.2020 12:52, Michael Müller-Hillebrand mmh(_at_)docufy(_dot_)de wrote:
Hi folks,
if a sequence stored in a variable consists of elements, we can not use the
nice function index-of().
Also, if the variable is typed as="element()*" I cannot use the axes preceding-sibling or
following-sibling. I can solve that by not typing the variable or use as="document-node()"
after adding <xsl:document> to the variable's sequence constructor.
My current solution finding the position of the first <h1> in a sequence would
be something like:
count($seq/h1[1]/preceding-sibling::*) + 1
with $seq being a sequence typed as document-node().
Are there better methods to get the position of a certain element in the
sequence?
In my scenario I collect a certain set of elements using xsl:copy-of and want
to process them in the context of that sequence (regarding position) and not in
the context of their original document location.
Thanks a lot for any pointers,
- Michael
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--