Re: [xsl] using the AND condition

Subject: Re: [xsl] using the AND condition
From: Joerg Heinicke <joerg.heinicke@xxxxxx>
Date: Thu, 06 Jun 2002 00:03:22 +0200
<xsl:template match="ListOfInsClaimsContact">
  <xsl:apply-templates select="InsClaimsContact"/>
</xsl:template>

<xsl:template match="InsClaimsContact[RoleInAccident='Owner' and ContactRule='Insured']">
do anything
</xsl:template>


<xsl:template match="InsClaimsContact[RoleInAccident='Driver' and ContactRule='Witness']">
do anything
</xsl:template>


This processes the <InsClaimsContact>s in document order. If you need another order, you must change the first template:

<xsl:template match="ListOfInsClaimsContact">
<xsl:apply-templates select="InsClaimsContact[RoleInAccident='Driver' and ContactRule='Witness']"/>
<xsl:apply-templates select="InsClaimsContact[RoleInAccident='Owner' and ContactRule='Insured']"/>
</xsl:template>


Regarsd,

Joerg


CROFT, MICHAEL wrote:
I need to search for elements that contain certain text and are part of a
certain parent element.  I need to search the whole document and find the
specific parent element, that contains certain child elements with certain
text.  This information needs to be printed in order.  For example:
<ListOfInsClaimsContact>
				<InsClaimsContact Id="1-16HHT">
					<BirthDate>04/08/2002
00:00:00</BirthDate>
	
<CellularPhoneNumber>3418748901</CellularPhoneNumber>
					<ContactRole>Insured</ContactRole>>
					<PositionInVehicle>passnege
of</PositionInVehicle>
	
<RoleInAccident>Owner</RoleInAccident>
				</InsClaimsContact>
				<InsClaimsContact Id="2-16HHT">
					<BirthDate>04/08/2002
00:00:00</BirthDate>
	
<CellularPhoneNumber>3418748901</CellularPhoneNumber>
					<ContactRole>Witness</ContactRole>>
					<PositionInVehicle>passnege
of</PositionInVehicle>
	
<RoleInAccident>Driver</RoleInAccident>
				</InsClaimsContact>
</ListOfInsClaimsContact>


Basically my logic needs to say, Find the <InsClaimsContact> element that contains a <RoleInAccident> element whose data is "Driver", AND a <ContactRole> element whose data is "Witness", then process this InsClaimsContact element. Next, find the <InsClaimsContact> element that contains a <RoleInAccident> element whose data is "Owner" AND a <ContactRole> element whose data is "Insured", then process this InsClaimsContact element. This continues for many possible combinations, and of course the xml content will not be in the order I need it to print in the report.

Also, this template below wont work....This will match on the first
InsClaimsContact element and do the conditional logic, this wont "force" the
printing of the order I specify.

		<xsl:template match="//InsClaimsContact">
			<xsl:if test="(RoleInAccident='Driver') and
(ContactRole='Insured')">  this could be false for the first match of
InsClaimsContact, and fall to next if.  I need to force it to find these
elements to print.
				FOUND FIRST MATCH; PRINT THIS
InsClaimsContact elements information FIRST
			</xsl:if>
			<xsl:if test="(RoleInAccident='Owner') and
(ContactRole='Witness')">
				FOUND SECOND MATCH; PRINT THIS
InsClaimsContact elements information SECOND
			</xsl:if>
		</xsl:template>

Mike


XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list


Current Thread