[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Assembling nodes from parts outside of the current

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
Re:  Assembling nodes from parts outside of the current
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

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.