Hi Wolfgang,
I could not figure out what my "for-each" should have been. I knew I needed
one, I just did not see what it should be. Your patch to my style sheet ran
perfectly on the full file.
Thanks!
Mark
--------------------------------------------------
From: "Wolfgang Laun" <wolfgang(_dot_)laun(_at_)gmail(_dot_)com>
Sent: Sunday, February 07, 2010 12:41 AM
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
Subject: Re: [xsl] for-each-group dropping one element (my inability to
structure a test correctly)
Not being sure what your requirements are, I've found that this change, as
close to the original solution, does the trick:
...
<xsl:copy-of select="Location/Element" copy-namespaces="no"/>
<Description>
<xsl:for-each select="current-group()">
<xsl:if
test="not(Location/Element/following-sibling::SubDiv)">
<xsl:copy-of select="Data" copy-namespaces="no"/>
</xsl:if>
</xsl:for-each>
</Description>
<xsl:for-each-group select="current-group()"
group-by="Location/SubDiv">
...
-W
On Sun, Feb 7, 2010 at 9:09 AM, Mark Wilson <mark(_at_)knihtisk(_dot_)org>
wrote:
Hi all,
I have been at this for about six hours.
As written, the style sheet does not produce the element marked "Missing
element" in Listing 3 (the output ) and as "Not output" in Listing one
(source document). The problem is marked "My problem" in the Listing 2
(style sheet).
I Know that my problem is that I am telling the style sheet to give me
only the first <Data> element. What I don't know is how to tell it to
give me all of the <Data> elements that meet the <xsl:if> test, but none
of the <Data> element that do not meet that test. Or have I just set
everything up wrong to start with?
Any help would be appreciated
Mark
Listing 1: Input
<?xml version="1.0" encoding="UTF-8"?>
<List >
<Item plate="1" position="1">
<Feature>
<Location>
<Element>rays</Element>
</Location>
<Data>dot below the rays under TA</Data>
</Feature>
<Feature>
<Location>
<Element>rays</Element>
<SubDiv>main</SubDiv>
</Location>
<Data>main ray swollen at both ends</Data>
</Feature>
</Item>
<Item plate="2" position="1">
<Feature>
<Location>
<Element>rays</Element>
</Location>
<Data>dot below the rays under S</Data> <!-- Not output -->
</Feature>
</Item>
<Item plate="1" position="2">
<Feature>
<Location>
<Element>rays</Element>
<SubDiv>main</SubDiv>
</Location>
<Data>main ray thicker in the middle</Data>
</Feature>
</Item>
</List>
Listing 2: Style Sheet
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="List">
<List>
<xsl:for-each-group select="Item/Feature" group-by="Location/Element">
<xsl:sort select="current-grouping-key()"/>
<Item>
<Feature>
<xsl:copy-of select="Location/Element" copy-namespaces="no"/>
<xsl:if test="not(Location/Element/following-sibling::SubDiv)">
<Description>
<xsl:copy-of select="Data" copy-namespaces="no"/><!-- My Problem -->
</Description>
</xsl:if>
<xsl:for-each-group select="current-group()" group-by="Location/SubDiv">
<xsl:sort select="current-grouping-key()"/>
<Level1>
<xsl:copy-of select="Location/SubDiv" copy-namespaces="no"/>
<Description>
<xsl:copy-of select="current-group()/Data" copy-namespaces="no"/>
</Description>
</Level1>
</xsl:for-each-group>
</Feature>
</Item>
</xsl:for-each-group>
</List>
</xsl:template>
</xsl:stylesheet>
Listing 3: Output
<?xml version="1.0" encoding="UTF-8"?>
<List>
<Item>
<Feature>
<Element>rays</Element>
<Description>
<Data>dot below the rays under TA</Data>
<!-- Missing Element: <Data>dot below the rays under S</Data> goes
here -->
</Description>
<Level1>
<SubDiv>main</SubDiv>
<Description>
<Data>main ray swollen at both ends</Data>
<Data>main ray thicker in the middle</Data>
</Description>
</Level1>
</Feature>
</Item>
</List>
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--