Subject: RE: [xsl] xsl:key containing mixed elements From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Sat, 23 Oct 2004 16:28:05 +0100 |
Your code works fine in Saxon. It reports: Duplicate state name: standby Duplicate state name: record Duplicate state name: record Duplicate state name: off Duplicate state name: off Duplicate state name: standby Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: George James [mailto:GeorgeJ@xxxxxxxxxxxxxxx] > Sent: 23 October 2004 13:10 > To: 'xsl-list@xxxxxxxxxxxxxxxxxxxxxx' > Subject: [xsl] xsl:key containing mixed elements > > Hi > > I have a problem that I'm trying to solve using <xsl:key> but I'm not > getting the results that I expected. > > It's probably best to explain first what I want to do and > then show how I > tried to use <xsl:key> to solve the problem. > > I have a file containing a mixture of <UML:SimpleState> and > <UML:CompositeState> elements. Each one has a name > attribute, but in the > case of the <UML:CompositeState> element the name comprises > of a state name > followed by a colon followed by a sub-machine state name. > > What I want to do is simply read my file and report any > duplicate state > names. > > So, here's a simplified example of some of the data in my file: > > <UML:SimpleState name="on" /> > <UML:SimpleState name="off" /> > <UML:SimpleState name="off" /> > <UML:SimpleState name="standby" /> > <UML:CompositeState name="rewind:rewinding" /> > <UML:CompositeState name="forward:fastforwarding" /> > <UML:CompositeState name="standby:waiting" /> > <UML:CompositeState name="record:recording" /> > <UML:CompositeState name="record:recording" /> > > I'd like to generate error messages for states 'off', > 'standby' and 'record' > because they are duplicates. > > This is how I tried to solve the problem. It works for the > 'off' case but > not for the 'standby' or the 'record' cases: > > <!-- Create an index containing the name of all simple states > and the first part of the name of all composite states --> > <xsl:key > name="name" > match="UML:CompositeState[@name]" > use="substring-before(@name,':')" /> > <xsl:key > name="name" > match="UML:SimpleState[@name]" > use="@name" /> > > <xsl:template match='/'> > <xsl:for-each select="//UML:CompositeState[@name]"> > <xsl:variable name='name' select="substring-before(@name,':')"/> > <xsl:if test="count(key('name',$name))>1"> > <xsl:message>Duplicate state name: <xsl:value-of > select='$name'/></xsl:message> > </xsl:if> > </xsl:for-each> > > <xsl:for-each select="//UML:SimpleState[@name]"> > <xsl:variable name='name' select="@name"/> > <xsl:if test="count(key('name',$name))>1"> > <xsl:message>Duplicate state name: <xsl:value-of > select='$name'/></xsl:message> > </xsl:if> > </xsl:for-each> > </xsl:template> > > Can anyone enlighten me please? > > BTW I'm using xalan: > Vendor: Apache Software Foundation > Vendor URL: http://xml.apache.org/xalan-j > > D:\s>java -version > java version "1.4.2_05" > Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04) > Java HotSpot(TM) Client VM (build 1.4.2_05-b04, mixed mode) > > > Regards > George > > George James Software > Cachi Tools, Training, Technology > www.georgejames.com > +44-1932-252568
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] xsl:key containing mixed , Jeni Tennison | Thread | RE: [xsl] xsl:key containing mixed , George James |
Re: [xsl] Random Sort, Jeff Kenton | Date | Re: [xsl] xpath problem, Anton Triest |
Month |