RE: [xsl] RE: Testing values from parent nodes

Subject: RE: [xsl] RE: Testing values from parent nodes
From: "M. David Peterson" <m.david@xxxxxxxxxx>
Date: Wed, 26 May 2004 03:42:10 -0600
Hey Neil,

I'm assuming that based on your sample code and the source XML that you
are interested in the value of RR_group2/type as opposed to
RR_group1/type (which doesnt exist)?  If so, and without seeing the
context in which you are processing RR_group4, heres a sample that
should help get you where you need to go...

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="1.0">
<xsl:output method="text"/>
<xsl:template match="/">
  <xsl:apply-templates
select="RR/RR_row/RR_group1/RR_group2/RR_group3/RR_group4"/>
</xsl:template>
<xsl:template match="RR_group4">
  <xsl:if test="ancestor::RR_group2[type = '1']">
    hello world
  </xsl:if>
</xsl:template>
</xsl:stylesheet>

This will output "hello world" if the value of ancestor::RR_group2/type
is equal to 1.  I treated 1 as a string by using the single quotes but
this would work just as well without them given that 1 can be treated as
a string or a number by the processor.  You could also use <xsl:if
test="ancestor::RR_group2/type = '1'"> and get the same result.  The
difference between these two methods is show when they are used to
process the node and its children (as opposed to test for a value.)
"ancestor::RR_group2/type" puts 'type' into context where as
"ancestor::RR_group2[type]" puts 'RR_group2' into context if it has a
child with a local-name() of 'type'.

Let me know if this helps get you to where you need to be...

Best of luck!

<M:D/>

> -----Original Message-----
> From: SMITH Neil [mailto:neil.smith@xxxxxxxx]
> Sent: Wednesday, May 26, 2004 3:07 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] RE: Testing values from parent nodes
> 
> <RR>
> 	<RR_row>
> 		<ind_no>81723</ind_no>
> 		<pos_acad_m_no>1</pos_acad_m_no>
> 		<pos_acad_lib>Emeritierte(r)
Professor(in)</pos_acad_lib>
> 		<et25_lng>2</et25_lng>
> 		<RR_group1>
> 			<gr_no>330</gr_no>
> 			<gr_nom>Analysis: Gruppe Kaup</gr_nom>
> 			<RR_group2>
> 				<type>1</type>
> 				<type_lib>Publications</type_lib>
> 				<RR_group3>
> 					<cle>15381</cle>
> 					<RR_group4>
> 						<ordre>10</ordre>
> 						<text>G. Bissig: \ber
die Stabilitdt
> separierbarer Bldtterungen. Dissertation Fribourg, Juni 2002</text>
> 						<date_debut/>
> 						<date_fin/>
> 						<financement/>
>
<montant>0</montant>
> 					</RR_group4>
> 				</RR_group3>
> 			</RR_group2>
> 
> 
> Here is a part of my XML file that I am parsing to HTML.
> Here is my problem, I would like to test the value of
> /RR/RR_Row/RR_group1[type=1]  while I am parsing the values of the
> RR_group4 node (the output is not the same depending on the type).
> 
> I tried :
>         <xsl:if
test="ancestor::RR/RR_row/RR_group1/RR_group2[type=1]">
> 		But that doesn't work (crashes XMLSPY...)
> 	<xsl:if test="/RR/RR_row/RR_group1/RR_group2[type=1]">
> 		Same same...
> 
> 
> Could someone please help me as I have been stuck on this for a couple
of
> days now...
> 
> Thanks a lot
> Best regards,
> Neil.
> 
> 
> 
> Neil Smith
> Analyste Programmeur
> Universiti de Fribourg
> Av. de l'Europe 20
> CH - 1700 Fribourg
> Til. +41 26 300 7091

Current Thread