Subject: RE: [xsl] for-each-loop case From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Fri, 8 Apr 2005 08:24:47 +0100 |
> I am pretty new to XSLT2.0. My question is how to get desired output > xml from following input by just using for-each-group. I can do it now > with temporary tree but that means two phases transform: A two phase transform is often a good thing - it keeps your code modular and reusable! > > input: It's really helpful to readers to add some indentation: > > <scores> > <devision id="1"> > <student name="Tiger"> > <subject name="English"> > <score>98</score> > </subject> > <subject name="Math"> > <score>102</score> > </subject> > <subject name="History"> > <score>100</score> > </subject> > </student> > <student name="Jack"> ... > </student> > </devision> > <devision id="2"> ... > </devision> > </scores> > > Desired output : > > <?xml version="1.0" encoding="UTF-8"?> > <scores> > <subject name="English"> > <devision id="1"> > <student name="Tiger"> > <score>98</score> > </student> > <student name="Jack"> > <score>88</score> > </student> > </devision> ... > </subject> > </scores> > An unusual one! I think this is: <xsl:for-each-group select="//subject" group-by="@name"> <subject name="{current-grouping-key()}"> <xsl:variable name="students-of-subject" select="current-group()/parent::student"/> <xsl:for-each-group select="current-group()/ancestor::devision" group-by="@id"> <devision id="{current-grouping-key()}"> <xsl:copy-of select="$students-of-subject intersect current-group()/student"/> </ </ </ </ Not tested. Michael Kay http://www.saxonica.com/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] for-each-loop case, Kai Xu | Thread | [xsl] adding namespaces to result n, omprakash . v |
Re: [xsl] Test For Numeric Values?, James Fuller | Date | [xsl] adding namespaces to result n, omprakash . v |
Month |