[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Find several different attribute values on many e
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: 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?
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|