RE: [xsl] Getting unique nodes filtering by several attributes and mixing files

Subject: RE: [xsl] Getting unique nodes filtering by several attributes and mixing files
From: Jarno.Elovirta@xxxxxxxxx
Date: Tue, 25 Nov 2003 10:45:23 +0200
Hi,

> One of the XML files (week_schedule.xml) is the list of 
> programs to be on
> air for
> two different TV channels. This list contains an "onAir" node for each
> advertisment
> (commercials) block. It's the only way to know which programs 
> will be on air
> next
> week, yes :(

…

> <!-- my_would_be_even_better_result.xml -->
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <tv>
>   <program progName='Friends' date='17/11/2003'
> 	channel='1' weekDay='Mon' start='10:00' end='10:45' 
> ads='10:15,10:30'/>
>   <program progName='Friends' date='23/11/2003'
> 	channel='1' weekDay='Sun' start='09:00' end='09:45' 
> ads='14:15,14:30,...'/>
>   <program progName='X-Files' date='22/11/2003'
> 	channel='2' weekDay='Sat' start='14:00' end='15:30' 
> ads='09:15,09:30'/>
> </tv>

  <xsl:variable name="sep" select="'&#xE000;'"/>
  <xsl:variable name="schedule" select="document('week_schedule.xml', /)"/>
  <xsl:key name="lookup" match="onAir" use="concat(@progName, $sep, @weekDay, $sep, @channel)"/>
  <xsl:template match="programs">
    <tv>
      <xsl:for-each select="program">
        <xsl:copy>
          <xsl:variable name="key" select="concat(@progName, $sep, @weekDay, $sep, @channel)"/>
          <xsl:for-each select="$schedule">
            <xsl:variable name="air" select="key('lookup', $key)"/>
            <xsl:copy-of select="$air/@date"/>
            <xsl:attribute name="adsAt">
              <xsl:for-each select="$air/@adsAt">
                <xsl:if test="not(position() = 1)">,</xsl:if>
                <xsl:value-of select="."/>
              </xsl:for-each>
            </xsl:attribute>
          </xsl:for-each>
          <xsl:copy-of select="@*"/>
        </xsl:copy>
      </xsl:for-each>
    </tv>
  </xsl:template>

Will you get you almost there, you just need to add sorting based on program name and airdate—you need to do a look up to get the date, but you can't use the key for that, sorry. See the FAQ on how to sort dates.

Cheers,

Jarno - Revolution By Night: Faithless (Edit) (by Ronan Harris)

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


Current Thread