|
Subject: RE: [xsl] How do can I select distinct nodes and adding a counter at the sa me time From: TSchutzerWeissmann@xxxxxxxxxxxxxxxx Date: Fri, 22 Nov 2002 15:58:46 -0000 |
Dear Ismaël
>I know what you mean, but the problem I have is how do I produce a tree
with
>distinct values that I can access afterwards.
This is essentially a grouping problem. You can use xsl:key to group
elements according to a particular value. This will allow you to access the
distinct values as a nodeset, without having to put them in a variable and
use an extension function.
[from your first email]
> The second one looks like this:
>
> <xx>
> <xxx>.1.5.6.3.8
> <xxxx att1=".1.5.6.3.8"/>
> <xxx>
> <xxx>.1.5.6.3.10
> <xxxx att2="1.5.6.3.9"/>
> <xxx>
> <xxx>.1.5.6.4.5</xxx>
> </xx>
[...]
> What I want to do know is getting out of the second xml file the
> values of the attributes mapped onto an odd number (5,7,9) when this
> attribute is available. When not available the text value of the tag must
be
> used.
The only hard bit is setting up the key so that it ignores the text value of
the xxx tag if there's an xxxx child with an attribute.
<xsl:key name="distinctlyXXX" match="xxx"
use="self::xxx[not(xxxx/@*)]|xxxx/@*"/>
<!-- group on the xxxx child's first attribute, if it exists,
otherwise on the text value of xxx -->
<xsl:variable name="first_path" select="firstFile.xml"/>
<xsl:variable name="first" select="document($first_path)"/>
<xsl:variable name="first_count_maps" select="count($first/mapping/map)"/>
<xsl:template match="xx">
<mapping>
<xsl:copy-of select="$first/mapping/map"/>
<xsl:apply-templates
select="xxx[generate-id() = generate-id(key('distinctlyXXX',
self::xxx[not(xxxx/@*)]|xxxx/@*))]"/>
<!-- this is classic Muenchian grouping -->
</mapping>
</xsl:template>
<xsl:template match="xxx">
<map oid="{string(self::xxx[not(xxxx/@*)] | xxxx/@*)}"
id="{(position() + $first_map_count) * 2 - 1}">
<xsl:value-of select=". | xxxx/@*"/>
</map>
</xsl:template>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] How do can I select disti, Cams Ismael | Thread | RE: [xsl] How do can I select disti, Cams Ismael |
| RE: [xsl] PDF to XSL-FO, Mark Seaborne | Date | Re: [xsl] PDF to XSL-FO, Noel Golding |
| Month |