[xsl] Re: Re-arranging an XML file

Subject: [xsl] Re: Re-arranging an XML file
From: Mike Stroud <stroudmw@xxxxxxxxx>
Date: Wed, 21 Jan 2009 13:22:27 +0200
Hi again George and all,

As I mentioned in an earlier post: I'm new to XSL (I've got about 3
hours experience) and am still trying to get my head around it, I have
an XSL file that outputs in CSV format, but when I tried applying it
to the script you sent (below) everything falls down. There are a few
things I don't understand:
- how can I output in CSV format?
- how do I remove the "<AddedAlbums> tag?
- how can I include (for example) "LastChangedBy" labeling it
something else? (eg "User")
An example would be appreciated. This is all a long way from the COBOL
I worked on 20+ years ago!

Thanks again,

Mike in SA

> Date: Tue, 20 Jan 2009 10:41:51 +0200
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> From: George Cristian Bina <george@xxxxxxxxxxxxx>
> Subject: Re: [xsl] Re: Re-arranging an XML file
> Message-ID: <49758E4F.8040904@xxxxxxxxxxxxx>
>
> Hi Mike,
>
> I do not understand what is the part you have difficulties with. You can
> define a key to get the Author elements from their id and then just use
> that, see below:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> version="1.0">
>   <xsl:output indent="yes" />
>   <xsl:key name="artistById" match="Artist" use="Number"/>
>   <xsl:template match="/">
>     <xsl:apply-templates select="*/AddedAlbums"/>
>   </xsl:template>
>   <xsl:template match="AddedAlbums">
>     <AddedAlbums><xsl:apply-templates/></AddedAlbums>
>   </xsl:template>
>   <xsl:template match="Album">
>     <Album><xsl:apply-templates/></Album>
>   </xsl:template>
>   <xsl:template match="AlbumName">
>     <AlbumName><xsl:value-of select="."/></AlbumName>
>   </xsl:template>
>   <xsl:template match="ArtistNumber">
>     <Name><xsl:value-of select="key('artistById', .)/Name"/></Name>
>   </xsl:template>
>   <xsl:template match="*|text()"/>
> </xsl:stylesheet>
>
> Best Regards,
> George
> --
> George Cristian Bina
> <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
> http://www.oxygenxml.com
>
> Mike Stroud wrote:
>> Dear Group,
>>
>> Further to my mail of Date: Tue, 13 Jan 2009: I am still struggling
>> with this one. Here is an adaptation of a real-world example:
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <wc:COLLECTION xmlns:wc="http://www.ptc.com/infoengine/1.0";>
>> <DeletedArtists NAME="DeletedArtists" TYPE="Unknown" STATUS="0">
>> </DeletedArtists>
>> <AddedArtists NAME="AddedArtists" TYPE="Unknown" STATUS="0">
>> <Artist>
>>     <LastChangedBy>Mike</LastChangedBy>
>>     <Number>0000000015</Number>
>>     <Name>Bob Dylan</Name>
>> </Artist>
>> <Artist>
>>     <LastChangedBy>Mike</LastChangedBy>
>>     <Number>0000000016</Number>
>>     <Name>Bonnie Tyler</Name>
>> </Artist>
>> </AddedArtists>
>> <DeletedAlbums NAME="DeletedAlbums" TYPE="Unknown" STATUS="0">
>> </DeletedAlbums>
>> <AddedAlbums NAME="AddedAlbums" TYPE="Unknown" STATUS="0">
>> <Album>
>>     <ArtistNumber>0000000015</ArtistNumber>
>>     <AlbumNumber>0000000010</AlbumNumber>
>>     <AlbumName>Blood on the Tracks</AlbumName>
>> </Album>
>> <Album>
>>     <ArtistNumber>0000000015</ArtistNumber>
>>     <AlbumNumber>0000000011</AlbumNumber>
>>     <AlbumName>Empire Burlesque</AlbumName>
>> </Album>
>> <Album>
>>     <ArtistNumber>0000000016</ArtistNumber>
>>     <AlbumNumber>0000000020</AlbumNumber>
>>     <AlbumName>Hide Your Heart</AlbumName>
>> </Album>
>> </AddedAlbums>
>> </wc:COLLECTION>
>>
>> How can I turn that into something like this using XSL?
>>
>> <AddedAlbums>
>>   <Album>
>>     <Name>Bob Dylan</Name>
>>     <AlbumName>Blood on the Tracks</AlbumName>
>>   </Album>
>>   <Album>
>>     <Name>Bob Dylan</Name>
>>     <AlbumName>Empire Burlesque</AlbumName>
>>   </Album>
>>   <Album>
>>     <Name>Bonnie Tyler</Name>
>>     <AlbumName>Hide Your Heart</AlbumName>
>>   </Album>
>> </AddedAlbums>
>>
>> Many thanks,

Current Thread