xsl-list
[Top] [All Lists]

problem using self::node() in for-each

2004-05-21 09:23:56

I have an XML document with the following structure:

XML Input

<root>
   <information type="source">
       <instance>
           <inf_type>source</type>
           <inf_source_id>1</id>
           <inf_name>Source 1</name>
       </instance>
       <instance>
           <inf_type>source</type>
           <inf_source_id>2</id>
           <inf_name>Source 2</name>
       </instance>
   </information>
   <information type="info">
       <instance>
           <inf_type>info</type>
           <inf_source_id>2</source_id>
           <inf_text>Information 1</text>
       </instance>
       <instance>
           <inf_type>info</type>
           <inf_source_id>1</source_id>
           <inf_text>Information 2</text>
       </instance>
       <instance>
           <inf_type>info</type>
           <inf_source_id>1</source_id>
           <inf_text>Information 3</text>
       </instance>
       <instance>
           <inf_type>info</type>
           <inf_source_id>2</source_id>
           <inf_text>Information 4</text>
       </instance>
       <instance>
           <inf_type>info</type>
           <inf_source_id>2</source_id>
           <inf_text>Information 5</text>
       </instance>
       <instance>
           <inf_type>info</type>
           <inf_source_id>1</source_id>
           <inf_text>Information 6</text>
       </instance>
   </information>
</root>

The inf_source_id in the <information type="info"> refers to the inf_source_id in the <information type="source">
i.e. Information 1 has inf_source_id of 2 meaning it came from Source 2.

I'm trying to output all the inf_text using xsl:for-each along with the name of the source it has a reference to through inf_source_id.

e.g.

Information 1 - Source 2
Information 2 - Source 1
Information 3 - Source 1
Information 4 - Source 2
Information 5 - Source 2
Information 6 - Source 1


However, I can't get the XPath expression to select the correct source node using the inf_source_id from the current node to work.
I've used this method before except not in <xsl:for-each> and it works fine.


XSLT

<xsl:template name="handleInformation">

<xsl:variable name="info" select="/root/information/instance[inf_type='info']"/>

   <xsl:for-each select="$info">

<xsl:variable name="inf_source" select="/root/information/instance[inf_type = 'source' and (inf_source_id = ./inf_source_id)]/inf_name"/>

       <xsl:call-template name="printInformation">
           <xsl:with-param name="source" select=$inf_source"/>
           <xsl:with-param name="text" select=./inf_text"/>
       </xsl:call-template>

   </xsl:for-each>

</xsl:template>

Thanks,

Garrett

_________________________________________________________________
Help STOP SPAM with the new MSN 8 and get 2 months FREE* http://join.msn.com/?page=features/junkmail



<Prev in Thread] Current Thread [Next in Thread>