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
like:
#!/bin/bash
(
  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
>
<https://webmail.siemens-it-solutions.com/owa/redir.aspx?C=9fb20d019e3e4cb993
44d708709a3177&URL=mailto%3arichard.kerry%40atos.net>
>
>
>
>
>
> [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
>
<https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.w3.org
%2FTR%2Fxslt-30%2F%23element-apply-templates&data=02%7C01%7Crichard.kerry%40a
tos.net%7Cf54e291885cc4d7f604408d7bf68dcd8%7C33440fc6b7c7412cbb730e70b0198d5a
%7C0%7C0%7C637188329424694875&sdata=eSQdcCjN4EO8jORS463GpcDU2L9K0dGwwHP6wU9zJ
3o%3D&reserved=0> element
> also has an optional mode attribute. The value of this attribute must be
> one of the following:
>
>    - an EQName
>
<https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.w3.org
%2FTR%2Fxslt-30%2F%23dt-eqname&data=02%7C01%7Crichard.kerry%40atos.net%7Cf54e
291885cc4d7f604408d7bf68dcd8%7C33440fc6b7c7412cbb730e70b0198d5a%7C0%7C0%7C637
188329424694875&sdata=Fk%2FK%2FfJKIe1TdwQmwpizrP8xMug12fJUDBRGLfJG17g%3D&rese
rved=0>,
>    which is expanded as described in 5.1.1 Qualified Names
>
<https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.w3.org
%2FTR%2Fxslt-30%2F%23qname&data=02%7C01%7Crichard.kerry%40atos.net%7Cf54e2918
85cc4d7f604408d7bf68dcd8%7C33440fc6b7c7412cbb730e70b0198d5a%7C0%7C0%7C6371883
29424704871&sdata=J9K12tJfdfAz4JxbQAcj9II%2FfTDTxabxPgUUSo5aHv0%3D&reserved=0>
to
>    define the name of a mode
>    - the token #default, to indicate that the default mode for the
stylesheet
>    module
>
<https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.w3.org
%2FTR%2Fxslt-30%2F%23dt-stylesheet-module&data=02%7C01%7Crichard.kerry%40atos
.net%7Cf54e291885cc4d7f604408d7bf68dcd8%7C33440fc6b7c7412cbb730e70b0198d5a%7C
0%7C0%7C637188329424704871&sdata=a6iW12SrGH06RlMcl2h9b8dJI3REzfkYOrO5Au8g9z4%
3D&reserved=0> is
>    to be used
>    - the token #unnamed, to indicate that the unnamed mode
>
<https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.w3.org
%2FTR%2Fxslt-30%2F%23dt-unnamed-mode&data=02%7C01%7Crichard.kerry%40atos.net%
7Cf54e291885cc4d7f604408d7bf68dcd8%7C33440fc6b7c7412cbb730e70b0198d5a%7C0%7C0
%7C637188329424714867&sdata=i6lQizANc28QMchUjq6CdLldwmM57L1PNleISc%2F%2BDHo%3
D&reserved=0> is
>    to be used
>    - the token #current, to indicate that the current mode
>
<https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.w3.org
%2FTR%2Fxslt-30%2F%23dt-current-mode&data=02%7C01%7Crichard.kerry%40atos.net%
7Cf54e291885cc4d7f604408d7bf68dcd8%7C33440fc6b7c7412cbb730e70b0198d5a%7C0%7C0
%7C637188329424714867&sdata=%2FSSYYInob%2BrZ3Jj5CQK2mqWdJgtpzkoGFsBxM%2FDihKs
%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 <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/965995> (by
> email <>)

Current Thread