I share a lot, but surprisingly, I still have too many tidbits and side projects that I'd like to get out to the community. Here's another long-overview due (and marginally relavant) post on XSLT. Dominic Cronin might call these types of blog posts "notes to self" and I've posted about this kind of Secondary Memory.
So here's some starter XSLT variables I've used when transforming source Tridion Component XML and referencing a linked Component. With modular templating you'd normally use something like the Get Extension (DGX) to be able to reference related Components. Otherwise you would add these Components to the package.
But with the older style XSLT templates, or anytime you had access to the content model while using XSLT, we used the document() function against the other component's namespace. This is one of the places where you'd be glad you always gave a Schema a good namespace.
XSLT referencing another Component
<xsl:for-each select="//namespace:link_to_multimediacomponent"> <xsl:variable name="COMP" select="document(@xlink:href)/tcm:Component"/> <xsl:variable name="DATA" select="$COMP/tcm:Data"/> <xsl:variable name="CONTENT" select="$DATA/tcm:Content"/> <xsl:variable name="META" select="$DATA/tcm:Metadata"/> <xsl:for-each>
You could also use the same approach when referencing the Component that's being rendered by the XSLT template. You can see an example in my "Inspect Component Details" post:
<xsl:variable name="Content" select="/tcm:Component/tcm:Data/tcm:Content" />
You could then reference Xpaths starting from $Content.
<xsl:apply-templates select="$Content/*" />
With a few variables, you've made selecting something as easy as remembering its path based on the source XML. But then this isn't Tridion per se, but just XSLT's variables.
Thanks for letting me reminisce. XSLT + Tridion brings me back to the "old days" on the forum, where I feared the likes of power forum users like +Dominic Cronin or +Jeremy Grand-Scrutton. Maybe Dom will forgive me for referencing W3School. :-P