[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[Recent Entries]
[Reply To This Message]
Re: pairing up similar tags based on an attribute
Subject: Re: pairing up similar tags based on an attribute
From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx>
Date: Thu, 12 Oct 2006 09:05:22 +0100
|
On 10/12/06, Webmaster <Webmaster@xxxxxxxxxxx> wrote:
Hello.
My data (snippet) looks like this:
<spec partnumber="9300033" parentpn="9310079">
<value>DB9</value>
</spec>
<spec partnumber="9300133" parentpn="9310079">
<value>M</value>
</spec>
<spec partnumber="9300033" parentpn="9310023">
<value>RJ45</value>
</spec>
<spec partnumber="9300133" parentpn="9310023">
<value>F</value>
</spec>
I'm trying to write a template that prints out each pair of 9300033 and
9300133 with the same @parentpn, but without luck:
<xsl:variable name="connectortype" >
<xsl:for-each select="spec[@partnumber=9300033]">
<xsl:for-each select="./@parentpn">
<xsl:message>
<xsl:value-of select="ancestor::spec/value" />
<xsl:value-of select="ancestor::spec[@partnumber=9300133 and
@parentpn=.]/value" />
</xsl:message>
</xsl:for-each>
</xsl:for-each>
</xsl:variable>
With this code, I'm getting the correct value for the 9300033, but I can't
seem to grab the corresponding 9300133 value. I'm not quite sure if my
xpath is right.
This is a grouping issue. If you are using 1.0 then you'll need to use
the ominously titled "muenchian grouping"
(http://www.jenitennison.com/xslt/grouping/index.xml)
If you are using xslt 2.0 then use xsl:for-each-group:
<xsl:for-each-group select="spec" group-by="@parentpn">
<group>
<xsl:apply-templates select="current-group()[@partnumber =
('9300033', '9300133')]"/>
</group>
</xsl:for-each-group>
cheers
andrew
|
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
RSS 2.0 |
|
Atom 0.3 |
|
|