Re: [xsl] xslt 3.0 possible feature - some sort of collection to help when streaming

Subject: Re: [xsl] xslt 3.0 possible feature - some sort of collection to help when streaming
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Thu, 10 Mar 2011 15:02:59 -0500
Andrew,

This doesn't speak to the requirement itself (which seems perfectly legit to me), but only to the use case.

One approach to achieving the aims here is to reverse the order of operations. The first pass doesn't emit the messages, but simply generates elements in a namespace reserved for the purpose. The second pass strips them out, while emitting messages for them as it goes.

This approach works well when you are not set on using xsl:message as the reporting channel. For example, the messages can instead be siphoned to a separate document. Or, as you suggest, higher-level analysis of the message set can be conducted.

Needless to say, this is all a piece of cake in XSLT 2.0 with or without XProc. Or if you like, two pieces of cake.

Cheers,
Wendell

On 3/10/2011 1:28 PM, Andrew Welch wrote:
Often we 'hack' xsl:message to output some information to post process
later, and it struck me that it would be useful to have a way of
accessing what has been sent to xsl:message during the same transform.
  This would be especially useful when streaming, as processing the
data twice for different purposes is less than ideal.

For example, you for-each over some data but want to also do something
with @names later:

<xsl:for-each select="/millions/and/millions">

[ process each item ]

   <xsl:message select="concat('Processed ', @name)"/>
</xsl:for-each>

then later in the same template, say to create an index or list of links:

<xsl:for-each select="get-messages()">
   [ process the items stored earlier 'Processed name1' , 'Processed name2' etc ]

Is there anything conceptually wrong with this, other than the
non-guaranteed order of processing?  If not, then it could be a proper
instruction rather than xsl:message, eg a top-level element to set it
up:

<xsl:appender name="someAppender" option1="foo" option2="bar"/>

with:

<xsl:append name="someAppender"> text to append</xsl:append>

and then to access it:

get-appender('someAppender')



-- ====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx Mulberry Technologies, Inc. http://www.mulberrytech.com 17 West Jefferson Street Direct Phone: 301/315-9635 Suite 207 Phone: 301/315-9631 Rockville, MD 20850 Fax: 301/315-8285 ---------------------------------------------------------------------- Mulberry Technologies: A Consultancy Specializing in SGML and XML ======================================================================

Current Thread