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

Re: How do I "merge" nodes based on a common key?

Subject: Re: How do I "merge" nodes based on a common key?
From: Joseph Silverman <yossie@xxxxxxxxxxxxxxxxx>
Date: Fri, 26 Mar 2004 14:21:59 -0800
xslt merge nodes
that allows me to group stuff, but how do I "merge" them once grouped?

to rephrase, I still get a line for EACH node in the original data, rather than one line for all nodes with any given matching @title.

Thanks for your help! - Yossie

---

<xsl:stylesheet version = '1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:output method="html" encoding="UTF-8" indent="yes" />
<xsl:key name="title" match="http_load | httpload" use="@title" />
<xsl:template match="run">
<table border="1" cellpadding="6">
<xsl:for-each select="httpload[count(. | key('title', @title)[1]) = 1]">
    <xsl:for-each select="key('title',@title)">
<tr>
<td><xsl:value-of select="@title"/></td>
<td><xsl:value-of select="@cache"/></td>
<td><xsl:value-of select="@gzip"/></td>
<td><xsl:value-of select="fetches/text()"/></td>
<td><xsl:value-of select="max_parallel/text()"/></td>
<td><xsl:value-of select="mbytes_sec/text()"/></td>
</tr>
    </xsl:for-each>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>

On Mar 26, 2004, at 2:52 AM, Brian Chrisman wrote:

A grouping question everybody asks... a good 'grouping' solution:
http://www.jenitennison.com/xslt/grouping/muenchian.html


Joseph Silverman wrote:


I have a xml file I would like to process into a html table.  I figure
that xslt is the way to go.  The file contains various nodes (results
from load testing) that all share a single attribute, title, that
identifies and links them in groups.  See snippet below.

So, I can't figure out some code to process this file and "merge" the
nodes based on the title attribute so I can print each "merged" node as
a single line in a table. sub-nodes AS well as attributes (though there
is no overlap in the latter!) should be merged. Then I can use a
<xsl:for-each ..> to process the merged list.


I tried some stuff on my own and it is getting me nowhere (see below).

Any ideas?

Thanks - Yossie

<run>
<http_load title="X">

<url>http://delenn-g:8080/lps/sample-apps/calendar/calendar.lzo?
lzt=swf</url>
         <rr>delenn-g</rr>
         <fetches>94851</fetches>
         <max_parallel>50</max_parallel>
         <mbytes>111.443</mbytes>
         <elapsed>180.406</elapsed>
         <mean_kbytes_connection>1.20312</mean_kbytes_connection>
         <fetches_sec>525.763</fetches_sec>
         <mbytes_sec>0.617733</mbytes_sec>
         <msec_connect_mean>0.400405</msec_connect_mean>
         <msec_connect_max>66.577</msec_connect_max>
         <msec_connect_min>0.211</msec_connect_min>
         <msec_first_mean>94.5393</msec_first_mean>
         <msec_first_max>3768.62</msec_first_max>
         <msec_first_min>2.111</msec_first_min>
         <http_result>
                 <code>404</code>
                 <count>94851</count>
         </http_result>
</http_load>
<httpload       gzip="true"
         title="X"
         seconds="180"
         path="/sample-apps/calendar/calendar.lzo?lzt=swf"
         parallel="50"
         cache="false"
         lps="lps"
         datapath=""
         backend="" />
<fetch-curl title="X">

<url>http://delenn-g:8080/lps/sample-apps/calendar/calendar.lzo?
lzt=swf</url>
<status>HTTP/1.1 404 Not Found</status>
<size>1232</size>
<http-headers>
<Date>Wed, 24 Mar 2004 19:04:12 GMT</Date>
<Server>Jetty/4.2.17 (Linux/2.4.18-26.8.0 i386
java/1.4.1_02)</Server>
<Content-Type>text/html</Content-Type>
<Content-Length>1232</Content-Length>
</http-headers>
</fetch-curl>
<!--
...
... more httpload, http_load, fetch-curl nodes with different title
attributes, no more than one of each with a given title.
...
-->
</run>


---

<xsl:stylesheet version = '1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:output method="html" encoding="UTF-8" indent="yes" />
<xsl:template match="/run">
<xsl:key name="bleh" match="http_load | httpload | fetch_curl"
use="@title" />
<html>
<head>
<title>
Title
</title>
</head>
<body>
<table border="1" cellpadding="6">
<tr>
<th>Title</th>
<th>Cache</th>
<th>Gzip</th>
<th>Fetches</th>
<th>Parallel</th>
<th>Mbytes/Sec</th>
</tr>
<xsl:for-each select="key('bleh',.)">
<tr>
<td><xsl:value-of select="@title"/></td>
<td><xsl:value-of select="@cache"/></td>
<td><xsl:value-of select="@gzip"/></td>
<td><xsl:value-of select="fetches/text()"/></td>
<td><xsl:value-of select="max_parallel/text()"/></td>
<td><xsl:value-of select="mbytes_sec/text()"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Yossie Silverman - ENTP                   "Leave the bearded one for me"
I'NET: yossie@xxxxxxxxxxxxxx            - Flesh Gordon
HTTP: http://www.blacksteel.com/~yossie/  B3 f- t dc g++ k++ s++ p m e+

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.