Hello,
(The problem exists with the key on line 14)
I am trying to access 'thing' elements by the value of their 'a'
element children.
I do not know what the contents of the 'a' elements will be, so I
gather the unique values and iterate through them. When I iterate
through, I can print the value, placing the value into the key does
not return the 'things' that have 'a' children with that value.
Additionally, placing a literal string will access the desired nodes,
but a variable with the same string content does not.
The input, current output, desired output, xslt (with line numbers)
and xslt are listed below.
Many thanks,
Tim
======= Input ========
<things>
<thing>
<name>thing_1</name>
<a>one</a>
</thing>
<thing>
<name>thing_3</name>
<a>one</a>
<a>two</a>
</thing>
<thing>
<name>thing_4</name>
<a>one</a>
<a>two</a>
<a>three</a>
</thing>
<thing>
<name>thing_5</name>
<a>three</a>
</thing>
</things>
======= Current Output =========
Dynamic Selection (DOES NOT WORK)
one 0
two 0
three 0
======= Desired output ========
Hard-coded selection (DESIRED OUTPUT)
one 3
two 2
three 2
======== XSLT =========
1 <xsl:transform version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
2 <xsl:output method="text"/>
3 <xsl:key name="things-by-a" match="thing" use="a"/>
4
5 <xsl:template match="/">
6 <xsl:variable name="as">
7 <xsl:for-each-group select="//a" group-by=".">
8 <a><xsl:value-of select="current-grouping-key()"/></a>
9 </xsl:for-each-group>
10 </xsl:variable>
11
12 <xsl:value-of select="concat($NL,'Dynamic Selection (DOES
NOT WORK)',$NL)"/>
13 <xsl:for-each select="$as/a">
14 <xsl:value-of select="concat(.,'
',count(key('things-by-a',.)),$NL)"/>
15 </xsl:for-each>
16
17 <xsl:value-of select="concat($NL,'Hard-coded selection
(DESIRED OUTPUT)',$NL)"/>
18 <xsl:value-of select="concat('one
',count(key('things-by-a','one')),$NL)"/>
19 <xsl:value-of select="concat('two
',count(key('things-by-a','two')),$NL)"/>
20 <xsl:value-of select="concat('three
',count(key('things-by-a','three')),$NL)"/>
21 </xsl:template>
22
23 <xsl:variable name="NL">
24 <xsl:text>
25 </xsl:text>
26 </xsl:variable>
27
28 </xsl:transform>
======== XSLT w/o line numbers =========
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:key name="things-by-a" match="thing" use="a"/>
<xsl:template match="/">
<xsl:variable name="as">
<xsl:for-each-group select="//a" group-by=".">
<a><xsl:value-of select="current-grouping-key()"/></a>
</xsl:for-each-group>
</xsl:variable>
<xsl:value-of select="concat($NL,'Dynamic Selection (DOES NOT WORK)',$NL)"/>
<xsl:for-each select="$as/a">
<xsl:value-of select="concat(.,' ',count(key('things-by-a',.)),$NL)"/>
</xsl:for-each>
<xsl:value-of select="concat($NL,'Hard-coded selection (DESIRED
OUTPUT)',$NL)"/>
<xsl:value-of select="concat('one ',count(key('things-by-a','one')),$NL)"/>
<xsl:value-of select="concat('two ',count(key('things-by-a','two')),$NL)"/>
<xsl:value-of select="concat('three
',count(key('things-by-a','three')),$NL)"/>
</xsl:template>
<xsl:variable name="NL">
<xsl:text>
</xsl:text>
</xsl:variable>
</xsl:transform>
--~------------------------------------------------------------------
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>
--~--