|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Seeking help on Grouping distingt sub-elements
At 2002-05-06 11:00 -0400, jestoll@xxxxxxxxxx wrote:
I have tried various implemenations of 'Meunchian' groupings, When doing subgrouping, sometimes the Meunchian technique is more awkward than using simple variables. In the end, I think its coming down to a lack of sufficient understanding of the <xsl:key> tag on my part. Don't always jump to the conclusion that <xsl:key> must be used. Though there are times when that technique is superior to what is below, I think what is below will be the best technique for subgrouping for you given your needs. Attached below is a working solution. Note that this revealed to me that you have in your input a duplicate specific element value of "271" instead of one of them being "272" to get the answer you were looking for. You'll have to polish up the other elements as you need, I've used a shortcut to get the copied nodes copied. The essence of the algorithm is to only create a variable of the chassis elements being grouped, and then only act on the first member of the variable for each unique commonid value. Getting access to the last of the specific to use for the commonelement value is very straightforward. I hope this helps. .................. Ken T:\ftemp>type stoll.xml
<order>
<company>
<name>company1</name>
<shipment>
<shiptoid>1</shiptoid>
<chassis>
<commonid>19</commonid>
<commonelement>c191</commonelement>
<specificelement>s191</specificelement>
</chassis>
<chassis>
<commonid>17</commonid>
<commonelement>c171</commonelement>
<specificelement>s171</specificelement>
</chassis>
<chassis>
<commonid>19</commonid>
<commonelement>c192</commonelement>
<specificelement>s192</specificelement>
</chassis>
<chassis>
<commonid>17</commonid>
<commonelement>c172</commonelement>
<specificelement>s172</specificelement>
</chassis>
</shipment>
<shipment>
<shiptoid>2</shiptoid>
<chassis>
<commonid>18</commonid>
<commonelement>c181</commonelement>
<specificelement>s181</specificelement>
</chassis>
<chassis>
<commonid>16</commonid>
<commonelement>c161</commonelement>
<specificelement>s161</specificelement>
</chassis>
<chassis>
<commonid>18</commonid>
<commonelement>c182</commonelement>
<specificelement>s182</specificelement>
</chassis>
<chassis>
<commonid>16</commonid>
<commonelement>c162</commonelement>
<specificelement>s162</specificelement>
</chassis>
</shipment>
</company>
<company>
<name>company2</name>
<shipment>
<shiptoid>3</shiptoid>
<chassis>
<commonid>29</commonid>
<commonelement>c291</commonelement>
<specificelement>s291</specificelement>
</chassis>
<chassis>
<commonid>27</commonid>
<commonelement>c271</commonelement>
<specificelement>s271</specificelement>
</chassis>
<chassis>
<commonid>29</commonid>
<commonelement>c292</commonelement>
<specificelement>s292</specificelement>
</chassis>
<chassis>
<commonid>27</commonid>
<commonelement>c271</commonelement>
<specificelement>s271</specificelement>
</chassis>
</shipment>
<shipment>
<shiptoid>4</shiptoid>
<chassis>
<commonid>28</commonid>
<commonelement>c281</commonelement>
<specificelement>s281</specificelement>
</chassis>
<chassis>
<commonid>26</commonid>
<commonelement>c261</commonelement>
<specificelement>s261</specificelement>
</chassis>
<chassis>
<commonid>28</commonid>
<commonelement>c282</commonelement>
<specificelement>s282</specificelement>
</chassis>
<chassis>
<commonid>26</commonid>
<commonelement>c262</commonelement>
<specificelement>s262</specificelement>
</chassis>
</shipment>
</company>
</order>T:\ftemp>type stoll.xsl
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"><xsl:output indent="yes"/> <xsl:template match="order|company|name|shiptoid">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template><xsl:template match="shipment">
<shipment>
<xsl:apply-templates select="shiptoid"/>
<xsl:variable name="chassis" select="chassis"/>
<xsl:for-each select="chassis">
<xsl:if test="generate-id(.)=
generate-id($chassis[commonid=current()/commonid])">
<xsl:variable name="specifics"
select="$chassis[commonid=current()/commonid]"/>
<chassis>
<commonid><xsl:value-of select="commonid"/></commonid>
<commonelement>
<xsl:value-of select="$specifics[last()]/commonelement"/>
</commonelement>
<newtag>
<xsl:for-each select="$specifics">
<specificelement>
<xsl:value-of select="specificelement"/>
</specificelement>
</xsl:for-each>
</newtag>
</chassis>
</xsl:if>
</xsl:for-each>
</shipment>
</xsl:template></xsl:stylesheet> T:\ftemp>saxon -o stoll.out stoll.xml stoll.xsl T:\ftemp>type stoll.out <?xml version="1.0" encoding="utf-8"?> <order> <company> <name>company1</name> <shipment>
<shiptoid>1</shiptoid>
<chassis>
<commonid>19</commonid>
<commonelement>c192</commonelement>
<newtag>
<specificelement>s191</specificelement>
<specificelement>s192</specificelement>
</newtag>
</chassis>
<chassis>
<commonid>17</commonid>
<commonelement>c172</commonelement>
<newtag>
<specificelement>s171</specificelement>
<specificelement>s172</specificelement>
</newtag>
</chassis>
</shipment> <shipment>
<shiptoid>2</shiptoid>
<chassis>
<commonid>18</commonid>
<commonelement>c182</commonelement>
<newtag>
<specificelement>s181</specificelement>
<specificelement>s182</specificelement>
</newtag>
</chassis>
<chassis>
<commonid>16</commonid>
<commonelement>c162</commonelement>
<newtag>
<specificelement>s161</specificelement>
<specificelement>s162</specificelement>
</newtag>
</chassis>
</shipment></company> <company> <name>company2</name> <shipment>
<shiptoid>3</shiptoid>
<chassis>
<commonid>29</commonid>
<commonelement>c292</commonelement>
<newtag>
<specificelement>s291</specificelement>
<specificelement>s292</specificelement>
</newtag>
</chassis>
<chassis>
<commonid>27</commonid>
<commonelement>c271</commonelement>
<newtag>
<specificelement>s271</specificelement>
<specificelement>s271</specificelement>
</newtag>
</chassis>
</shipment> <shipment>
<shiptoid>4</shiptoid>
<chassis>
<commonid>28</commonid>
<commonelement>c282</commonelement>
<newtag>
<specificelement>s281</specificelement>
<specificelement>s282</specificelement>
</newtag>
</chassis>
<chassis>
<commonid>26</commonid>
<commonelement>c262</commonelement>
<newtag>
<specificelement>s261</specificelement>
<specificelement>s262</specificelement>
</newtag>
</chassis>
</shipment></company> </order>
G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ Box 266, Kars, Ontario CANADA K0A-2E0 +1(613)489-0999 (Fax:-0995) ISBN 0-13-065196-6 Definitive XSLT and XPath ISBN 1-894049-08-X Practical Transformation Using XSLT and XPath ISBN 1-894049-07-1 Practical Formatting Using XSLFO XSL/XML/DSSSL/SGML/OmniMark services, books(electronic, printed), articles, training(instructor-live,Internet-live,web/CD,licensed) Next public training: 2002-05-06,07,09,10,13,15,20, - 06-04,07,10,11,13,14,17,20,07-31,08-05,27,30 XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








