Input:
<ROOT>
<TEMPLATE style="test">
<ATTRIBUTE name="Color"><VALUE><UNIT>B</UNIT><UNIT>lack</UNIT></VALUE></ATTRIBUTE>
</TEMPLATE>
<TEMPLATE style="test">
<ATTRIBUTE name="Something"><VALUE>1235</VALUE></ATTRIBUTE>
<ATTRIBUTE name="Name"><VALUE><UNIT>Hello</UNIT></VALUE></ATTRIBUTE>
<ATTRIBUTE name="Height"><VALUE>12</VALUE></ATTRIBUTE>
</TEMPLATE>
<TEMPLATE style="something-else">
<ATTRIBUTE name="Test"><VALUE>Hey</VALUE></ATTRIBUTE>
</TEMPLATE>
<TEMPLATE style="footnotes">
<ATTRIBUTE name="FOOTNOTE_Test"><VALUE>not-relevant</VALUE></ATTRIBUTE>
<ATTRIBUTE name="FOOTNOTE_Name"><VALUE>whatever</VALUE></ATTRIBUTE>
<ATTRIBUTE name="FOOTNOTE_Color"><VALUE>Some value</VALUE></ATTRIBUTE>
</TEMPLATE>
<ROOT>
Desired Output:
<ROOT>
<TEMPLATE style="test">
<ATTRIBUTE name="Color"><VALUE><UNIT>B</UNIT><UNIT>lack</UNIT> *1</VALUE></ATTRIBUTE>
</TEMPLATE>
<TEMPLATE style="test">
<ATTRIBUTE name="Something"><VALUE>1235</VALUE></ATTRIBUTE>
<ATTRIBUTE name="Name"><VALUE><UNIT>Hello</UNIT> *2</VALUE></ATTRIBUTE>
<ATTRIBUTE name="Height"><VALUE>12</VALUE></ATTRIBUTE>
</TEMPLATE>
<TEMPLATE style="something-else">
<ATTRIBUTE name="Test"><VALUE>Hey</VALUE></ATTRIBUTE>
</TEMPLATE>
<TEMPLATE style="footnotes">
<ATTRIBUTE name="FOOTNOTE_Test"><VALUE>not-relevant</VALUE></ATTRIBUTE>
<ATTRIBUTE name="FOOTNOTE_Name"><VALUE>whatever</VALUE></ATTRIBUTE>
<ATTRIBUTE name="FOOTNOTE_Color"><VALUE>Some value</VALUE></ATTRIBUTE>
</TEMPLATE>
<ROOT>
In my templates with the style "test" there are attributes whose name + prefix "FOOTNOTE_" can match the names of the attributes from the template "footnotes". If the name matches, a " * {position}" should be added to the attribute value. The position counts up how many footnotes have already been set, but the order is based on the test-style attributes and not on the footnotes.
I have already tried various grouping attempts and for-each loops, but they never led to the desired result.
I am using XSLT 2.0
Here's a slightly simpler approach:
XSLT 2.0