Subject: RE: [xsl] Number of elements with a given attribute From: J L <jinlii@xxxxxxxxxxx> Date: Wed, 6 Jan 2010 01:51:12 +0000 |
I'm new to XSLT 2.0. I tried this example in Altova and couldn't get the output below. I'm not sure if the input is wrong or my xsl is incorrect. Thanks for your time! > <verse> > <part role=3D"a">...</part> > <part role=3D"a">...</part> > <part role=3D"b">...</part> > </verse> > <verse> input xml: <verses> <role name="a"> <verse>...</verse> <verse part="beginning">1</verse> </role> <role name="a"> <verse part="continuation">continuation 2</verse> </role> <role name="b"> <verse part="continuation">continuation 3</verse> </role> <role name="b"> <verse part="end">end</verse> <verse>...</verse> </role> <role name="a"> <verse>...</verse> <verse part="beginning">1</verse> </role> <role name="a"> <verse part="continuation">continuation 2</verse> </role> <role name="b"> <verse part="continuation">continuation 3</verse> </role> <role name="b"> <verse part="end">end</verse> <verse>...</verse> </role> </verses> xsl: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions"> <xsl:template match="verses"> <xsl:for-each-group select="*" group-starting-with="role/verse[empty(@part)] | verse[@part='beginning']"> <xsl:variable name="verse-number" select="position()"/> <verse> <xsl:for-each select="current-group()"> <part role="parent::role/@name"> <xsl:copy-of select="node()"/> </part> </xsl:for-each> </verse> </xsl:for-each-group> </xsl:template> </xsl:stylesheet> > From: mike@xxxxxxxxxxxx > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Date: Fri, 18 Dec 2009 09:45:18 +0000 > Subject: RE: [xsl] Number of elements with a given attribute > >> >> In a piece of theater, I have some verses that are split >> between different roles. >> >> The other are tagged on the following model: >> <role name='...'> >> ... >> <verse>...</verse> >> <verse part="beginning">...</verse> >> </role> >> <role name='...'> >> <verse part="continuation">...</verse> </role> <role name='...'> >> <verse part="continuation">...</verse> </role> <role name='...'> >> <verse part="end">...</verse> >> <verse>...</verse> >> ... >> </role> >> > >> I wish to have the count of preceding parts of verse from the >> last beginning part. >> Regards, > > A classic case of two overlapping hierarchies running over the same data. > One of these hierarchies is represented directly in the XML tree structure, > the other is represented indirectly. You want to perform an operation on the > "hidden" hierarchy, so it's best to invert the structure so the verse > hierarchy becomes the primary one. That is, you want: > > <verse> > <part role="a">...</part> > <part role="a">...</part> > <part role="b">...</part> > </verse> > <verse> > ... > > which can be done like this: > > <xsl:for-each-group select="$verses" > group-starting-with="verse[empty(@part)] | verse[@part='beginning']"> > <xsl:variable name="verse-number" select="position()"/> > <verse> > <xsl:for-each select="current-group()"> > <part role="parent::role/@name"> > <xsl:copy-of select="node()"/> > </part> > </xsl:for-each> > </verse> > </xsl:for-each-group> > > You now have each verse represented by a complete element, broken into parts > to show who speaks each part of the verse, and this makes it easy for > example to number the parts of a verse as you have asked for. > > Regards, > > Michael Kay > http://www.saxonica.com/ > http://twitter.com/michaelhkay > _________________________________________________________________ Hotmail: Powerful Free email with security by Microsoft. http://clk.atdmt.com/GBL/go/171222986/direct/01/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] counting with position(), Imsieke, Gerrit, le- | Thread | RE: [xsl] Number of elements with a, Michael Kay |
Re: [xsl] Modern web site design wi, Eric J. Bowman | Date | RE: [xsl] Number of elements with a, Michael Kay |
Month |