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

Re: Comparing attribute values of nodes in different

Subject: Re: Comparing attribute values of nodes in different contexts
From: Wolfgang Laun <wolfgang.laun@xxxxxxxxx>
Date: Sat, 6 Feb 2010 10:22:35 +0100
Re:  Comparing attribute values of nodes in different
This is a typical application for "Grouping", which is explained, with
examples,
in http://www.w3.org/TR/xslt20/#grouping.

Except for the HTML tags, this should do it:

  <xsl:template match="/caller">
    <xsl:for-each-group select="contact" group-by="@callID">
      Call connected on <xsl:value-of select="@timeCallInitiated"/>.
      There are <xsl:value-of select="count(current-group())"/>
related connections as follows:
      <xsl:for-each select="current-group()">
        Connection: <xsl:value-of select="@timeAgentConnected"/> to
agent <xsl:value-of select="@agent"/>
      </xsl:for-each>
    </xsl:for-each-group>
  </xsl:template>

-W
PS: Seems like you got an answer, so you do know how to ask ;-)

On Fri, Feb 5, 2010 at 11:46 PM, Robert Bourdeau <rhbourdeau@xxxxxxxxx>
wrote:
>
> Consider the following XML document, showing a set of telephone calls
> received from a specific telephone number, along with the various
> internal connections to different employees from the time the call is
> first connected to the phone system until the call is terminated.
>
>
> <caller callerID="9195551212">
>    <contact
>        callID="1"
>        contactID="3"
>        timeCallInitiated="2010-02-04T09:42:58"
>        timeAgentConnected="2010-02-04T09:43:23"
>        agent="Jamie Smith"
>    />
>    <contact
>        callID="1"
>        contactID="2"
>        timeCallInitiated="2010-02-04T09:42:58"
>        timeAgentConnected="2010-02-04T09:43:23"
>        agent="Angela Jones"
>    />
>    <contact
>        callID="1"
>        contactID="1"
>        timeCallInitiated="2010-02-04T09:42:58"
>        timeAgentConnected="2010-02-04T09:42:58"
>        agent="Desi Johnson"
>    />
>    <contact
>        callID="2"
>        contactID="3"
>        timeCallInitiated="2010-02-04T09:41:45"
>        timeAgentConnected="2010-02-04T09:42:10"
>        agent="Jamie Smith"
>    />
>    <contact
>        callID="2"
>        contactID="2"
>        timeCallInitiated="2010-02-04T09:41:45"
>        timeAgentConnected="2010-02-04T09:42:10"
>        agent="Angela Jones"
>    />
>    <contact
>        callID="2"
>        contactID="1"
>        timeCallInitiated="2010-02-04T09:41:45"
>        timeAgentConnected="2010-02-04T09:41:45"
>        agent="Julia Billings"
>    />
>    <contact
>        callID="3"
>        contactID="2"
>        timeCallInitiated="2010-01-26T13:29:21"
>        timeAgentConnected="2010-01-26T13:29:49"
>        agent="Angela Jones"
>    />
>    <contact
>        callID="3"
>        contactID="1"
>        timeCallInitiated="2010-01-26T13:29:21"
>        timeAgentConnected="2010-01-26T13:29:21"
>        agent="Desi Johnson"
>    />
> </caller>
>
> Ideally this XML file would be one level deeper where all "contacts"
> having the same value for the callID attribute are grouped together
> under a single node. I cannot change that however. And therein lies my
> problem. To dumb this down I'd like output as follows:
>
>        Call Connected on 2010-02-04
>        There are 3 related connections as follows:
>        Connection: 2010-02-04T09:43:23 to agent Jamie Smith
>        Connection: 2010-02-04T09:43:23 to agent Angela Jones
>        Connection: 2010-02-04T09:42:58 to agent Desi Johnson
>        Call Connected on 2010-02-04
>        There are 3 related connections as follows:
>        Connection: 2010-02-04T09:42:10 to agent Jamie Smith
>        Connection: 2010-02-04T09:42:10 to agent Angela Jones
>        Connection: 2010-02-04T09:41:45 to agent Julia Billings
>        Call Connected on 2010-01-26
>        There are 2 related connections as follows:
>        Connection: 2010-01-26T13:29:49 to agent Angela Jones
>        Connection: 2010-01-26T13:29:21 to agent Desi Johnson
>
> The Key problem is just one little piece of this:
>        'There are 3 related connections as follows:'
> How do I get the '3' computed?
>
> For my application, it is important that I output that number BEFORE I
> output each of the connections.
> Here's the code to produce that output above (with one incomplete part):
>
>        <xsl:template match="/caller">
>          <xsl:for-each select="contact">
>            <xsl:if test="not(@callID =
preceding-sibling::contact[1]/@callID)">
>                <br/>
>                Call connected on <xsl:value-of
> select="scripts:justDate(@timeCallInitiated)"/>
>                <br/>
>                There are
>                <xsl:value-of select="count(/caller/contact[@callID = ?])"/>
>                related connections as follows:
>            </xsl:if>
>
>            <br/>
>            Connection:
>                <xsl:value-of select="@timeAgentConnected"/>
>            to agent
>                <xsl:value-of select="@agent"/>
>          </xsl:for-each>
>        </xsl:template>
>
> See that question mark '?' up there? What goes there? The @callID
> refers to the context of the preceding XPath expression. I want to
> only count those 'contact' nodes that have the same attribute value of
> 'callID' as the node being currently processed by the for-each node.
> But I have no idea how to reference the context of the for-each node
> from within that count function.
>
> I clearly need a better theoretical understanding of how different
> contexts are used in the XSL processing. But there seems to be a large
> gap between the technical documentation at w3c and how to even ASK
> about problems like this!
>
> Any help here?
>
> A totally alternative approach to the XSL stylesheet is perfectly
acceptable.
>
> Best
>
> Robert H. Bourdeau

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.