Re: [xsl] How do I pass the mode as a string?

Subject: Re: [xsl] How do I pass the mode as a string?
From: "BR Chrisman brchrisman@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 3 Mar 2020 15:54:08 -0000
If there's no data encoded in the file name (but too often, there is) and
reasonable total size, I occasionally do something in a scripting language
  trap "echo </Docs>" EXIT
  echo "<Docs>"
  cat ...file-glob...
) | .... xslt invocation command....

On Tue, Mar 3, 2020 at 7:37 AM Kerry, Richard richard.kerry@xxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> Ok,
> Thanks all for the explanations.  I'll look at the alternatives.
> If this was C++, which is what I use most of the time (XSL is infrequent,
> just when I want to manipulate some XML) I would use some kind of
> polymorphism to achieve this.  I'd define a couple of one-line functions
> with the different variables, or calls, and pass the appropriate one to the
> outer function so they could be run on its results (somewhat garbled,
> abbreviated explanation, sorry).  I'm not aware of anything in XSL that
> looks like polymorphism, but I would be interested to know if there was a
> construct that might be similar, or usable for cases like this one.
> Granted I can't construct variable names dynamically, but I can have a
> number of variables existing simultaneously and select one and pass it
> around by address if I need to.  I don't see an analogous construct in XSL,
> except to use choose/when to select a line of code based on an actual
> variable.
> I could send my examples if that would be best, but I think that would
> provide a lot of unnecessary code just to show a small bit of context.
> What I am actually trying to do is to get a number of XML files
> processed.  The files are in similar folders, called 'input' and 'output'.
> The files' names follow a couple of name patterns, acq_(\d{4}) and
> out_(\d{4}). There is identical code to scan through the folders and
> identify the files I want to process (and extract the numbers from the
> filenames).  They are then passed to apply-templates with the different
> modes as mentioned.
> So the file scanning, while not especially complicated, is not entirely
> trivial and I'd like to have it written just once.  And then, because the
> contents of the files differs in structure, they are handled by different
> templates, with different modes.
> [image: Blue line]
> *Richard Kerry*
> BNCS Engineer, SI SOL Telco & Media Vertical Practice
> M: +44 (0)7812 325518
> 2nd Floor, MidCity Place, 71 High Holborn, London, WC1V 6EA
> richard.kerry@xxxxxxxx
> [image: Atos logo]
> This e-mail and the documents attached are confidential and intended
> solely for the addressee; it may also be privileged. If you receive this
> e-mail in error, please notify the sender immediately and destroy it. As
> its integrity cannot be secured on the Internet, the Atos group liability
> cannot be triggered for the message content. Although the sender endeavours
> to maintain a computer virus-free network, the sender does not warrant that
> this transmission is virus-free and will not be liable for any damages
> resulting from any virus transmitted.
> ------------------------------
> *From:* Michael Kay mike@xxxxxxxxxxxx <
> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
> *Sent:* 03 March 2020 11:48
> *To:* xsl-list@xxxxxxxxxxxxxxxxxxxxxx <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
> *Subject:* Re: [xsl] How do I pass the mode as a string?
> Section B'6.6.2 in the XSLT 3.0 spec states:
> The xsl:apply-templates
3o%3D&reserved=0> element
> also has an optional mode attribute. The value of this attribute must be
> one of the following:
>    - an EQName
>    which is expanded as described in 5.1.1 Qualified Names
>    define the name of a mode
>    - the token #default, to indicate that the default mode for the
>    module
3D&reserved=0> is
>    to be used
>    - the token #unnamed, to indicate that the unnamed mode
D&reserved=0> is
>    to be used
>    - the token #current, to indicate that the current mode
%3D&reserved=0> is
>    to be used
> It does not allow an expression, and it does not allow an attribute value
> template.
> It's similar to trying to refer to a variable by name: you can't construct
> variable names dynamically either, however much you feel it would make your
> life easier.
> You haven't described your problem so it's difficult to suggest a
> different approach to solving it. Higher-order functions might be the right
> way.
> Michael Kay
> Saxonica
> XSL-List info and archive <>
> EasyUnsubscribe <> (by
> email <>)

Current Thread