RE: [xsl] problem using self::node() in for-each

Subject: RE: [xsl] problem using self::node() in for-each
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Fri, 21 May 2004 17:40:00 +0100
Without studying your logic in detail,

inf_source_id = ./inf_source_id

is obviously wrong because it means the same as

inf_source_id = inf_source_id

I suspect you want

 inf_source_id = current()/inf_source_id

Michael Kay

> -----Original Message-----
> From: Garrett Hynes [mailto:garretthynes@xxxxxxxxxxx] 
> Sent: 21 May 2004 16:24
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] problem using self::node() in for-each
> 
> 
> 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

Current Thread