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 22:39:41 -0000
Saxon under oXygenSent from my Verizon, Samsung Galaxy smartphone
-------- Original message --------From: "Martin Honnen martin.honnen@xxxxxx"
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: 2/8/24  2:22 PM  (GMT-08:00)
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: [xsl] Find several different
attribute values on many elements On 08/02/2024 23:11, 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 <xsl:variable name="ditacollectionString"> B B B B B B B 
select="concat($srcPath, '?select=*.dita')"/>>> B B B B <xsl:variable
name="xmlcollectionString"> B B B B B B B  select="concat($srcPath,
'?select=*.xml')"/>>> 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  <xsl:value-of select="concat(., ' ')"/>> B B B B B B B 
</xsl:for-each>> 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  <xsl:value-of select="concat(., ' ')"/>> B B B B B B B 
</xsl:for-each>> 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  <xsl:value-of select="concat(., ' ')"/>> 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  <xsl:for-each>
select="distinct-values(collection($ditacollectionString)//element())" >At
this point you have created a sequence of (distinct) atomic values ofthe
contents of all elements in the collection so you are basicallydealing with
strings (or other atomic values);> <xsl:apply-templates
mode="conditions"/>therefore doing an apply-templates without a select here,
which thendefaults to try to process the child nodes of the context item
(which isnot a node) doesn't work out.>> B B B B B B B B B B B 
</xsl:for-each>>> B B B B <xsl:template match="@product | @audience "
mode="conditions">> B B B B B B B  <xsl:value-of select="concat(., ' ')"/>>
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()?>Is that Saxon
Java or which XSLT processor?

Current Thread