Re: [xsl] Find several different attribute values on many elements

Subject: Re: [xsl] Find several different attribute values on many elements
From: "dvint dvint@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 8 Feb 2024 23:10:20 -0000
Thanks, I just copied the earlier for-each and didn't rework it.Sent from my
Verizon, Samsung Galaxy smartphone
-------- Original message --------From: "G. Ken Holman g.ken.holman@xxxxxxxxx"
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: 2/8/24  2:19 PM  (GMT-08:00)
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx, xsl <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Subject: Re: [xsl] Find several different attribute values on many elements
Yes, the error is apt because distinct-values() returns strings. I'm assuming
this is because you don't want to process elements of duplicate string
value.If you use <xsl:for-each-group group-by="." select="........"> then you
will have control at the first element of each value and so your context will
allow the <xsl:apply-templates/>I hope this helps.. . . . . KenAt 2024-02-08
22:12 +0000, dvint@xxxxxxxxx wrote:>I'm trying to process a collection of
documents and extract the >distinct-values for several attributes. My first
attempt was this >which is very slow>>B B B B B B B B  <xsl:variable
name="ditacollectionString">B B B B B B B B B B B B B B B B 
select="concat($srcPath, '?select=*.dita')"/>>>B B B B B B B B  <xsl:variable
name="xmlcollectionString">B B B B B B B B B B B B B B B B 
select="concat($srcPath, '?select=*.xml')"/>>>B B B B B B B B B B B B B B B B 
<xsl:for-each>
>select="distinct-values(collection($ditacollectionString)//*/@audience)"
>>B B B B B B B B B B B B B B B B B B B B B B B B  <xsl:value-of
select="concat(., ' ')"/>>B B B B B B B B B B B B B B B B 
</xsl:for-each>>B B B B B B B B B B B B B B B B  <xsl:for-each>
>select="distinct-values(collection($ditacollectionString)//*/@platform)"
>>B B B B B B B B B B B B B B B B B B B B B B B B  <xsl:value-of
select="concat(., ' ')"/>>B B B B B B B B B B B B B B B B 
</xsl:for-each>>B B B B B B B B B B B B B B B B  <xsl:for-each>
>select="distinct-values(collection($ditacollectionString)//*/@props)"
>>B B B B B B B B B B B B B B B B B B B B B B B B  <xsl:value-of
select="concat(., ' ')"/>>B B B B B B B B B B B B B B B B 
</xsl:for-each>>>I'm looking for a way to just make a single for-each loop and
tried this>>B B B B B B B B B B B B B B B B B B B B B B B B  <xsl:for-each>
>select="distinct-values(collection($ditacollectionString)//element())"
>>B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B 
<xsl:apply-templates
mode="conditions"/>>>B B B B B B B B B B B B B B B B B B B B B B B B 
</xsl:for-each>>>B B B B B B B B  <xsl:template match="@product | @audience "
mode="conditions">>B B B B B B B B B B B B B B B B  <xsl:value-of
select="concat(., ' ')"/>>B B B B B B B B  </xsl:template>>>But I get an error
on the <xsl:apply-templates mode="conditions"/> indicating>The required item
type of the context item is node(), but the >supplied expression {.} has item
type xs:anyAtomicType.>>I also need to do this with both .dita and .xml files
and I'm >planning on making 2 collections, is there a way to do one
collection()?>--Contact info, blog, articles, etc.
http://www.CraneSoftwrights.com/s/ |Check our site for free XML, XSLT, XSL-FO
and UBL developer resources |Streaming hands-on XSLT/XPath 2 training class
@US$125 (5 hours free) |Essays (UBL, XML, etc.)
http://www.linkedin.com/today/author/gkholman |

Current Thread