The component-filter.xsl custom-filtering stylesheet templates provided in this
example will copy the values from the component elements in the topic prolog
elements to the @otherprops attribute of the topicref elements.
<xsl:template match="element()[contains(@class, ' map/topicref ')][@href != '']">
<xsl:variable name="components">
<xsl:apply-templates mode="get-components" select="." />
</xsl:variable>
<xsl:variable name="existing-otherprops" select="@otherprops" />
<xsl:variable name="otherprops">
<xsl:value-of select="normalize-space(concat($components,' ',$existing-otherprops))" />
</xsl:variable>
<xsl:copy>
<xsl:apply-templates select="@*[name() != 'otherprops']" />
<xsl:if test="$otherprops != ''">
<xsl:attribute name="otherprops">
<xsl:value-of select="$otherprops" />
</xsl:attribute>
<xsl:if test="$debug = 'true'">
<xsl:message>
<xsl:value-of select="concat('otherprops=',$otherprops)" />
</xsl:message>
</xsl:if>
</xsl:if>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="element()[contains(@class, ' map/topicref ')][@href != '']" mode="get-components">
<xsl:for-each select="document(@href)">
<xsl:for-each select="//element()[contains(@class, ' topic/component ')]">
<xsl:value-of select="normalize-space()" />
<xsl:if test="position() != last()">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</xsl:template>