There seem to be quite a few similar questions, but none of them helped me. I'd like to refactor the following piece of XSLT:
<fo:table-cell xsl:use-attribute-sets="table-item-bordered">
<fo:block>
<xsl:value-of select="/forms//instance[@versionNumber = '1']/content//textbox[@id = $id]/text()" />
</fo:block>
</fo:table-cell>
<fo:table-cell xsl:use-attribute-sets="table-item-bordered">
<fo:block>
<xsl:value-of select="/forms//instance[@versionNumber = '2']/content//textbox[@id = $id]/text()" />
</fo:block>
</fo:table-cell>
<fo:table-cell xsl:use-attribute-sets="table-item-bordered">
<fo:block>
<xsl:value-of select="/forms//instance[@versionNumber = '3']/content//textbox[@id = $id]/text()" />
</fo:block>
</fo:table-cell>
Note the changing versionNumber attribute.
The xml source looks something like this:
<forms>
<instance versionNumber="3">
<content>
<textbox id="1">THREE</textbox>
</content>
<previousVersions>
<instance versionNumber="1">
<content>
<textbox id="1">ONE</textbox>
</content>
</instance>
<instance versionNumber="2">
<content>
<textbox id="1">TWO</textbox>
</content>
</instance>
</previousVersions>
</instance>
</forms>
The output should be a table row formatted like this:
+-----+-----+-------+
| ONE | TWO | THREE |
+-----+-----+-------+
In code this will look something like this:
<table-cell>ONE</table-cell>
<table-cell>TWO</table-cell>
<table-cell>THREE</table-cell>
This would be easy enough without using a loop counter, however I always want need 3 cells, regardless of how many versions there are. If there is no instance with versionNumber=3, the table needs to look like this:
+-----+-----+-----+
| ONE | TWO | |
+-----+-----+-----+
Or in XML:
<table-cell>ONE</table-cell>
<table-cell>TWO</table-cell>
<table-cell></table-cell>
$instanceIdand$id? Also show the relevant part of your input and the output you want to create. Maybe these variables are not necessary.