[xsl] Re: Omitting node within For-Each in Merge

Subject: [xsl] Re: Omitting node within For-Each in Merge
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Mon, 8 Dec 2003 06:50:28 +0100
"JCS" <subscriber@xxxxxxxxxxxxx> wrote in message
news:BBFA426C.1055%subscriber@xxxxxxxxxxxxxxxx
> Hi everyone,
>
> The answer to this problem may be as simple as finding my sunglasses
perched
> on my head, but I'm having trouble dealing with a simple concept. I've
> looked in the archives and around the net but have come up blank.
>
> I'm merging two documents and matching a common element with a variable.
But
> how do I exclude or omit redundant data?
>
> My XML document A:
> <level>
>     <level>10</level>
>     <data>foo</data>
>     <more_data>bar<more_data>
> </level>
>
> My XML document B:
>
> <row>
>     <level>10</level>
>     <foo_data>foodata</foo_data>
>     <bar_data>bar_data</bar_data>
> </row>
>
> Output desired:
>
> <merge>
>     <level>10</level>
>     <data>foo</data>
>     <more_data>bar<more_data>
>     <foo_data>foodata</foo_data>
>     <bar_data>bar_data</bar_data>level>10>
> </merge>
>
>
> My current XSL:
>
> <xsl:variable name="merge" select="document('merge.xml')"/>
>
> <xsl:template match="/">
>
> <merge>
>     <xsl:for-each select="//level/level">
>         <xsl:variable name="level">
>             <xsl:value-of select="text()"/>
>         </xsl:variable>
>         <xsl:copy-of select="../child::*"/>
>         <xsl:copy-of select="$merge//row[Level=$level]/*"/>
>     </xsl:for-each>
> </merge>
>
> Because I'm asking it to select all the children of <row> I get the
<level>
> element output again, I want to omit this. Is there a special way to
> filter/omit nodes without suppressing the output with templates? i.e.
> Specify to select all children nodes EXCEPT <level>? This is where I get
> stuck for some reason.

Yes, instead of:

>         <xsl:copy-of select="$merge//row[Level=$level]/*"/>

use:

         <xsl:copy-of
select="$merge//row[level=$level]/*[not(self::level)]"/>

In the above xsl instruction you have one additional error -- there isn't
any "Level" element in the code you showed us -- should be "level".



=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL




 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread