RE: [xsl] Checking for nodes in other nodes

Subject: RE: [xsl] Checking for nodes in other nodes
From: "Simon, Jb" <jb.simon@xxxxxxxx>
Date: Tue, 07 Jun 2005 15:27:50 -0400
Many Thanks one again a slight variation (changed for my exact schema)
of what Omprakash.V sent worked great.

--------------------------------
This Sig Intentionally Left Blank


> -----Original Message-----
> From: Touchtel [mailto:omprakashv@xxxxxxxxxxxxxxxxx]
> Sent: Tuesday, June 07, 2005 12:29 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: [xsl] Checking for nodes in other nodes
> 
> 
>    Hi,
>            You may want to try the following XSL. (Thanks to Bruce for
> setting me on the right track).
> 
> <?xml version="1.0" encoding="utf-8" ?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> 
> <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
> 
> <xsl:key name="equip" match="/Root/Equipment"
> use="/Root/Equipment/Message/Field/EnumeratedType"/>
> 
> <xsl:template match="/Root">
> 
> <xsl:for-each select="/Root/EnumeratedType">
> 
>     <xsl:variable name="var" select="Name"/>
> 
>    <xsl:value-of select="count(key('equip', $var))"/>
> 
>     </xsl:for-each>
> 
> </xsl:template>
> 
> <xsl:template match="/Root/Equipment">
> 
>      <xsl:value-of select="."/>
> 
> </xsl:template>
> 
> </xsl:stylesheet>
> 
>    My input XML:
> 
> <Root>
> <EnumeratedType>
> 	<Name>Speed Type</Name>
> 	<Enumeration>
> 		<Name>Low</Name>
> 		<Value>1</Value>
> 	</Enumeration>
> 	<Enumeration>
> 		<Name>Med</Name>
> 		<Value>5</Value>
> 	</Enumeration>	<Enumeration>
> 		<Name>High</Name>
> 		<Value>8</Value>
> 	</Enumeration>
> </EnumeratedType>
> 
> <Equipment>
> 	<Name>Motor</Name>
> 	<Message>
> 		<Name>Motor Speed</Name>
> 		<Field>
> 			<Name>MotorID</Name>
> 			<DataType>integer</DataType>
> 		</Field>
> 		<Field>
> 			<Name>Speed</Name >
> 			<DataType>Enumerated Type</DataType>
> 			<EnumeratedType>Speed Type</EnumeratedType>
> 		</Field>
> 	</Message>
> </Equipment>
> 
> <Equipment>
> 	<Name>Alternator</Name>
> 	<Message>
> 		<Name>Motor Speed</Name>
> 		<Field>
> 			<Name>MotorID</Name>
> 			<DataType>integer</DataType>
> 		</Field>
> 		<Field>
> 			<Name>Speed</Name >
> 			<DataType>Enumerated Type</DataType>
> 			<EnumeratedType>Speed Type</EnumeratedType>
> 		</Field>
> 	</Message>
> </Equipment>
> 
> 
> </Root>
> 
> The stylesheet correctly produced the output 2.
> 
> Cheers,
> Omprakash.V
> 
> 
> 
> -----Original Message-----
> From: Simon, Jb [mailto:jb.simon@xxxxxxxx]
> Sent: Tuesday, June 07, 2005 9:00 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Checking for nodes in other nodes
> 
> 
> 
> 
> Given the following XML
> 
> <EnumeratedType>
> 	<Name>Speed Type</Name>
> 	<Enumeration>
> 		<Name>Low</Name>
> 		<Value>1</Value>
> 	</Enumeration>
> 	<Enumeration>
> 		<Name>Med</Name>
> 		<Value>5</Value>
> 	</Enumeration>	<Enumeration>
> 		<Name>High</Name>
> 		<Value>8</Value>
> 	</Enumeration>
> </EnumeratedType>
> 
> <Equipment>
> 	<Name>Motor</Name>
> 	<Message>
> 		<Name>Motor Speed</Name>
> 		<Field>
> 			<Name>MotorID</Name>
> 			<DataType>integer</DataType>
> 		</Field>
> 		<Field>
> 			<Name>Speed<Name >
> 			<DataType>Enumerated Type</DataType>
> 			<EnumeratedType>Speed Type</EnumeratedType>
> 		</Field>
> 	</Message/
> </Equipment>
> 
> What I need to be able to determine is if an enumerated type is used
in
> more than one equipment. (The XSL is used to generate C code, and each
> equipment is generated to a different file. If the type is used in
> multiple pieces of equipment then it should be generated to a
> "common_types.h" file, if it is only used by ne piece of equipment
then
> it should be generated in that equipment's file)
> 
> Currently I can use the same .xsl to generate the different files,
using
> a command line parameter, however, all of the enumerated types are
> generates to all files at this point. I'm pretty noob and cluless
about
> xslt, so I don't even know where to begin to attempt this part of the
> task.
> 
> Thanks
> Joe Simon
> 
> --------------------------------
> This Sig Intentionally Left Blank

Current Thread