xsl-list
[Top] [All Lists]

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

2006-10-12 01:07:02
Hi,

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="http://www.w3.org/1999/XSL/Transform";>
  <xsl:key name="specByParent" match="spec" use="@parentpn"/>
  <xsl:template match="spec[(_at_)partnumber=9300033]">
    <xsl:variable name="specs" select="key('specByParent', @parentpn)"/>
    <xsl:text>pair(9300033,</xsl:text>
<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>
  <xsl:template match="spec"/>
</xsl:stylesheet>

Hope that helps,
George
---------------------------------------------------------------------
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com


Webmaster 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[(_at_)partnumber=9300033]">
  <xsl:for-each select="./@parentpn">
        <xsl:message>
                <xsl:value-of select="ancestor::spec/value" />
                <xsl:value-of select="ancestor::spec[(_at_)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.
Any help would be very much appreciated!!!

LN





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--