Subject: Re: Assembling nodes from parts outside of the current node
From: "Mark Peters" <flickrmeister@xxxxxxxxx>
Date: Thu, 25 Oct 2007 16:22:37 -0400
|
Wonderful! That worked. Thanks Scott!
Colin: I appreciate the biology/data organization lesson. :-)
Regards,
Mark
On 10/25/07, Scott Trenda <Scott.Trenda@xxxxxxxx> wrote:
> Whoops - I put @id in the key() function, instead of @partId. New source
> is below. Also, since you probably won't want <id>part03</id> to show up
> in the <part> section, I altered that too. Try this one:
>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>
> <xsl:key name="parts" match="allParts/part" use="@id"/>
>
> <xsl:template match="insects|insect|insect/name">
> <xsl:copy>
> <xsl:apply-templates/>
> </xsl:copy>
> </xsl:template>
>
> <xsl:template match="partMaps">
> <parts>
> <xsl:apply-templates/>
> </parts>
> </xsl:template>
>
> <xsl:template match="partMap">
> <part>
> <xsl:apply-templates select="key('parts', @partId)/@*"/>
> </part>
> </xsl:template>
>
> <xsl:template match="allParts/part/@*[not(name() = 'id')]">
> <xsl:element name="{name()}">
> <xsl:value-of select="."/>
> </xsl:element>
> </xsl:template>
>
> </xsl:stylesheet>
>
>
> ~ Scott
>
>
> -----Original Message-----
> From: Mark Peters [mailto:flickrmeister@xxxxxxxxx]
> Sent: Thursday, October 25, 2007 11:43 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: Assembling nodes from parts outside of the current
> node
>
> Hi Scott,
>
> Thanks for the help!
>
> I applied your transformation to the original document, but the output
> doesn't include the part data. Any idea why?
>
> <?xml version="1.0" encoding="UTF-8"?>
> <insects>
> <insect>
> <name>Bee</name>
> <parts>
> <part/>
> <part/>
> </parts>
> </insect>
> <insect>
> <name>Caterpillar</name>
> <parts>
> <part/>
> </parts>
> </insect>
> <insect>
> <name>Butterfly</name>
> <parts>
> <part/>
> <part/>
> </parts>
> </insect>
> </insects>
>
> Thanks,
> Mark
>
>
> On 10/25/07, Scott Trenda <Scott.Trenda@xxxxxxxx> wrote:
> > Keys are your friends! :)
> >
> > <xsl:stylesheet version="1.0"
> > xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> >
> > <xsl:key name="parts" match="allParts/part" use="@id"/>
> >
> > <xsl:template match="insects|insect|insect/name">
> > <xsl:copy>
> > <xsl:apply-templates/>
> > </xsl:copy>
> > </xsl:template>
> >
> > <xsl:template match="partMaps">
> > <parts>
> > <xsl:apply-templates/>
> > </parts>
> > </xsl:template>
> >
> > <xsl:template match="partMap">
> > <part>
> > <xsl:apply-templates select="key('parts', @id)/@*"/>
> > </part>
> > </xsl:template>
> >
> > <xsl:template match="allParts/part/@*">
> > <xsl:element name="{name()}">
> > <xsl:value-of select="."/>
> > </xsl:element>
> > </xsl:template>
> >
> > </xsl:stylesheet>
> >
> > ~ Scott
> >
> >
> > -----Original Message-----
> > From: Mark Peters [mailto:flickrmeister@xxxxxxxxx]
> > Sent: Thursday, October 25, 2007 11:02 AM
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject: Assembling nodes from parts outside of the current node
> >
> > Hi Everyone,
> >
> > This one has me stumped. I have a collection of nodes that store the
> > names of insects and include sub-nodes that map to the parts of
> > insects, stored elsewhere in the document.
> >
> > <?xml version=" 1.0" encoding="UTF-8"?>
> > <kingdoms>
> > <kingdom>
> > <insects>
> > <insect>
> > <name>Bee</name>
> > <partMaps>
> > <partMap mapId="pmap01" partId="part01"/>
> > <partMap mapId="pmap01" partId="part02"/>
> > </partMaps>
> > </insect>
> > <insect>
> > <name>Caterpillar</name>
> > <partMaps>
> > <partMap mapId="pmap02" partId="part01"/>
> > </partMaps>
> > </insect>
> > <insect>
> > <name>Butterfly</name>
> > <partMaps>
> > <partMap mapId="pmap03" partId="part01"/>
> > <partMap mapId="pmap01" partId="part02"/>
> > </partMaps>
> > </insect>
> > </insects>
> > <allParts>
> > <part id="part01" name="legs" description="Walks with
> > these"/>
> > <part id="part02" name="wings" description="Flies with
> > these"/>
> > </allParts>
> > </kingdom>
> > </kingdoms>
> >
> >
> > What I'm trying to do is list each insect and its parts in a series of
> > nodes, as follows. For each insect, I only want to display the parts
> > that pertain to that insect.
> >
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <insects>
> > <insect>
> > <name>Bee</name>
> > <parts>
> > <part>
> > <name>Legs</name>
> > <description>Walks with these</description>
> > </part>
> > <part>
> > <name>Wings</name>
> > <description>Flies with these</description>
> > </part>
> > </parts>
> > </insect>
> > <insect>
> > <name>Caterpillar</name>
> > <parts>
> > <part>
> > <name>Legs</name>
> > <description>Walks with these</description>
> > </part>
> > </parts>
> > </insect>
> > <insect>
> > <name>Butterfly</name>
> > <parts>
> > <part>
> > <name>Legs</name>
> > <description>Walks with these</description>
> > </part>
> > <part>
> > <name>Wings</name>
> > <description>Flies with these</description>
> > </part>
> > </parts>
> > </insect>
> > </insects>
> >
> >
> > I thought I'd simply need to compare the partMap/@partId values with
> > the corresponding part/@id values, as follows. The output currently
> > displays the insects, but not their parts. (We could argue that if
> > there are no parts, there are no objects. But that's another
> > discussion. :-)
> >
> >
> > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> > version="1.0">
> > <xsl:output method="xml" version=" 1.0"/>
> > <xsl:template match="/">
> > <insects>
> > <xsl:for-each select="kingdoms/kingdom
> > /insects/insect">
> > <xsl:sort select="name"/>
> > <insect>
> > <name>
> > <xsl:value-of select="name"/>
> > </name>
> > <xsl:for-each select="partMaps/partMap">
> > <xsl:choose>
> > <xsl:when
> > test="@partId=:../../../allParts/part/@id">
> > <part>
> > <name>
> > <xsl:value-of
> > select=":../../../allParts/part/@name"/>
> > </name>
> > <description>
> > <xsl:value-of
> > select=":../../../allParts/part/@description"/>
> > </description>
> > </part>
> > </xsl:when>
> > <xsl:otherwise/>
> > </xsl:choose>
> > </xsl:for-each>
> > </insect>
> > </xsl:for-each>
> > </insects>
> > </xsl:template>
> > </xsl:stylesheet>
> >
> >
> > By the way, I'm not an entomologist. Insects probably don't belong
> > directly within kingdoms. They're probably a genus or species or
> > something. :-) This is just test data.
> >
> > Thanks in advance for any help you could offer.
> >
> > Mark
> >
> > --
> >
> > Mark Peters
> > Senior Technical Writer
> > Saba Software
> >
> >
>
>
> --
>
> Mark Peters
> Senior Technical Writer
> Saba Software
>
>
--
Mark Peters
Senior Technical Writer
Saba Software
|