[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: use-when

Subject: Re: use-when
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Thu, 09 Dec 2010 18:55:39 -0500
Re:  use-when
At 2010-12-10 01:43 +0200, Andriy Gerasika wrote:
I cannot figure out how to use use-when attribute, beyond standard "system-property('file-separator')" example.

That is the only context of using it, as those are the only properties defined when the use-when= attributes are evaluated.


From section 3.12 of XSLT 2.0:

  There are no syntactic constraints on the XPath expression that
  can be used as the value of the use-when attribute. However,
  there are severe constraints on the information provided in its
  evaluation context. These constraints are designed to ensure
  that the expression can be evaluated at the earliest possible
  stage of stylesheet processing, without any dependency on
  information contained in the stylesheet itself or in any source
  document.

My code is overflown w/ "conditional" templates like:

<xsl:template match="some-xpath1[$file-set='A']">
<xsl:template match="some-xpath2[$file-set='B']">
<xsl:template match="some-xpath3[$file-set='C']">

$file-set is declared as parameter, but it is not really a parameter, it is the same for all files converted in a set, other parameters vary for each file.

I think System.setProperty("file-set", "A") is not a good choice, because there can be many transforms running in the background.

How to properly rewrite above "pseudo" use-when to "true" use-when, i.e.:
<xsl:template match="some-xpath1" use-when="user-property('file-set')='A'">
p.s.
I use Saxon-9 HE

Have you yet tried using modes for your problem?


<xsl:choose>
  <xsl:when test="$file-set='A'">
    <xsl:apply-templates mode="file-set-A"/>
  </xsl:when>
  <xsl:when test="$file-set='B'">
    <xsl:apply-templates mode="file-set-B"/>
  </xsl:when>
  <xsl:when test="$file-set='C'">
    <xsl:apply-templates mode="file-set-C"/>
  </xsl:when>
</xsl:choose>

...

<xsl:template match="some-xpath1" mode="file-set-A">
<xsl:template match="some-xpath2" mode="file-set-B">
<xsl:template match="some-xpath3" mode="file-set-C">


I hope this helps.


. . . . . . . . . Ken

--
Contact us for world-wide XML consulting & instructor-led training
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
G. Ken Holman                 mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.