This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: merging unknown nodes
- To: <xsl-list at mulberrytech dot com>
- Subject: RE: merging unknown nodes
- From: "Kevin Jones" <kjouk at yahoo dot co dot uk>
- Date: Wed, 1 Nov 2000 18:22:02 -0400 (EST)
- Reply-To: xsl-list at mulberrytech dot com
Jon,
This should do the trick,
<xsl:for-each select="/PRODUCTS/PRODUCT/OPTIONLIST">
<xsl:if test="not (@name = preceding::OPTIONLIST/@name)">
<xsl:variable name="name" select="@name"/>
<OPTIONLIST name="{$name}">
<xsl:copy-of select="/PRODUCTS/PRODUCT/OPTIONLIST/*[../@name=$name]"/>
</OPTIONLIST>
</xsl:if>
</xsl:for-each>
Kev.
>
>
> I'm new to XSL(T) and so far I have not been able to think of a way of
> achieving the required transform using XSLT and I think I'm going
> to have to
> result to using some JavaScript or may be some plain old C code :-(
>
> What I want to be able to do is transform this:
>
> <PRODUCTS>
> <PRODUCT name="bill_product">
> <OPTIONLIST name="fred"> <!-- The first 'fred' option list -->
> <OPTION>fred1</OPTION>
> <OPTION>fred2</OPTION>
> </OPTIONLIST>
> <OPTIONLIST name="george">
> <OPTION>george1</OPTION>
> </OPTIONLIST>
> </PRODUCT>
>
> <PRODUCT name="bob_product">
> <OPTIONLIST name="fred"> <!-- The second 'fred' optionlist -->
> <OPTION>fred3</OPTION>
> <OPTION>fred4</OPTION>
> </OPTIONLIST>
> <OPTIONLIST name="george">
> <OPTION>george2</OPTION>
> </OPTIONLIST>
> </PRODUCT>
> <PRODUCTS>
>
> Into this:
>
> <OPTIONLIST name="fred"> <!-- All the 'fred' optionlist's merged into
> one -->
> <OPTION>fred1</OPTION>
> <OPTION>fred2</OPTION>
> <OPTION>fred3</OPTION>
> <OPTION>fred4</OPTION>
> </OPTIONLIST>
> <OPTIONLIST name="george"> <!-- All the 'george' optionlist's
> merged into
> one -->
> <OPTION>george1</OPTION>
> <OPTION>george2</OPTION>
> </OPTIONLIST>
>
> If the transform was literally just this one case then it wouldn't be a
> problem however I want to be able to merge all OPTIONLIST's with the same
> name into one OPTIONLIST with that name i.e. I don't want to be limited to
> just 'fred' and 'george' option lists but I want to have any number of
> different named OPTIONLIST's and have them merged.
>
> Is this possible using just XSLT (in which case I guess I just
> don't have a
> good enough understanding yet) or am I going to have to use a procedural
> langauge to solve this part?
>
> TIA,
>
> Jon Payne
>
>
> TTPCom Ltd Tel: +44 1483 565050
> 20 Nugent Road
> Surrey Research Park
> Guildford
> Surrey GU2 7DF UK http://www.ttpcom.com
>
>
>
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list