On Thu, May 19, 2022 at 05:53:58PM -0000, Eliot Kimber
eliot(_dot_)kimber(_at_)servicenow(_dot_)com scripsit:
The typical way to do it is to have the processing of the section element get
the value from the preceding target element:
<xsl:template match="section">
<xsl:variable name="id" as="xs:string?"
select="preceding-sibling::target[1]/@refid"
/>
<xsl:copy>
<xsl:attribute name="id"
select="if ($id) then $id else generate-id(.)"
/>
<xsl:apply-templates mode="#current"/>
</xsl:copy>
</xsl:template>
What's wrong with
<xsl:template match="section">
<xsl:copy>
<xsl:apply-templates select="@*" mode="#current" />
<xsl:attribute name="id"
select="(preceding-sibling::*[1][self::target]/@refid,generate-id(.))
=> head()" />
<xsl:apply-templates mode="#current" />
</xsl:copy>
</xsl:template>
I am assuming XSLT 3, here, but that should be a fairly safe assumption
these days.
--
Graydon Saunders | graydonish(_at_)gmail(_dot_)com
Þæs oferéode, ðisses swá mæg.
-- Deor ("That passed, so may this.")
--~----------------------------------------------------------------
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
--~--