File: Data.xml
<?xml version="1.0"?>
<parts-list>
<component component-id="C28392-33-TT">
<name>Name 0</name>
<partref refid="1"/>
<partref refid="2"/>
<partref refid="3"/>
<partref refid="4"/>
<description>
<partref refid="3"/>.
</description>
</component>
<component component-id="5">
<name>name 1</name>
<partref refid="6"/>
<partref refid="7"/>
<description>
<partref refid="6"/> and a
<partref refid="7"/>.
</description>
</component>
<part part-id="6" supplier="4839">
<name>Pitter</name>
</part>
<part part-id="7" supplier="2983">
<name>Patter</name>
</part>
<part part-id="2" supplier="5910">
<name>Spanner</name>
</part>
<supplier country="Great Britain" vendor-id="4839">
<name>A Inc.</name>
</supplier>
<supplier country="Germany" vendor-id="2983">
<name>B Inc.</name>
</supplier>
<supplier country="Great Britain" vendor-id="5910">
<name>C Inc.</name>
</supplier>
</parts-list>
File: Transform.xslt
<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:text>
Here is a test of the idref() </xsl:text>
<xsl:text>function:
</xsl:text>
<xsl:for-each select="/parts-list/part">
<xsl:text>
 </xsl:text>
<xsl:value-of select="name"/>
<xsl:text> (part #</xsl:text>
<xsl:value-of select="@part-id"/>
<xsl:text>) is used in these products:
 </xsl:text>
<xsl:value-of select="idref(@part-id)/../../name"
separator="
 "/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Output:
Here is a test of the idref() function:
Pitter (part #6) is used in these products:
Patter (part #7) is used in these products:
Spanner (part #2) is used in these products: