Re: [xsl] pairing up similar tags based on an attribute

Subject: Re: [xsl] pairing up similar tags based on an attribute
From: George Cristian Bina <george@xxxxxxxxxxxxx>
Date: Thu, 12 Oct 2006 11:06:55 +0300

It is not very clear for me what is your input and what is your output... Anyway, have a look at the following stylesheet, on your example it will output

pair(9300033,9300133) with common parent 9310079
pair(9300033,9300133) with common parent 9310023

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="";>
<xsl:key name="specByParent" match="spec" use="@parentpn"/>
<xsl:template match="spec[@partnumber=9300033]">
<xsl:variable name="specs" select="key('specByParent', @parentpn)"/>
<xsl:value-of select="$specs[generate-id()!=generate-id(current())]/@partnumber"/>
<xsl:text>) with common parent </xsl:text>
<xsl:value-of select="@parentpn"/>
<xsl:template match="spec"/>

Hope that helps,
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger

Webmaster wrote:

My data (snippet) looks like this:

<spec partnumber="9300033" parentpn="9310079">

<spec partnumber="9300133" parentpn="9310079">

<spec partnumber="9300033" parentpn="9310023">

<spec partnumber="9300133" parentpn="9310023">

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:value-of select="ancestor::spec/value" />
		<xsl:value-of select="ancestor::spec[@partnumber=9300133 and
@parentpn=.]/value" />

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.

Any help would be very much appreciated!!!


Current Thread