xsl-list
[Top] [All Lists]

Re: Extract unique list of attributes ...

2005-07-22 10:41:41
This is the Muenchian grouping solution.

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="2.0">
 
<xsl:output method="xml" indent="yes" /> 

<xsl:key name="by-grade" match="student" use="@grade" />

<xsl:template match="/root">
  <root>
    <grades>
      <xsl:for-each select="students/student[generate-id() =
generate-id(key('by-grade', @grade)[1])]">
        <grade level="{(_at_)grade}" />      
      </xsl:for-each>
    </grades>  
    <xsl:copy-of select="students" />    
  </root>
</xsl:template>

</xsl:stylesheet>

As Mike has said, you can also use distinct-values() function with a
XSLT 2.0 stylesheet.

Regards,
Mukul

On 7/22/05, Raghupathy S <raghupathy(_dot_)s(_at_)gmail(_dot_)com> wrote:
Hi,

I'm a total newbie to XML / XSl, and I've been stuck with this problem.
Would be grateful for any suggestions / pointers

The problem -
Assuming I have an xml file

<root>
<students>
<student grade="first">abc</student>
<student grade="first">def</student>
<student grade="second">ghi</student>
<student grade="third">jkl</student>
<student grade="third">mno</student>
</students>
</root>

I need to transform this into the following xml using an XSL

<root>
<grades>
<grade level="first"/>
<grade level="second"/>
<grade level="third"/>
</grades>
<students>
<student grade="first">abc</student>
<student grade="first">def</student>
<student grade="second">ghi</student>
<student grade="third">jkl</student>
<student grade="third">mno</student>
</students>
</root>


I apologize if this is a totally newbie question, but ive been at my
wits end all day, trying to get this working.

Any advice / help would be most appreciated.

Thanks,
Rags

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>