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

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

Subject: Re: How do I pass the mode as a string?
From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 3 Mar 2020 15:55:33 -0000
Re:  How do I pass the mode as a string?
While this is not allowed in XSLT, one can accomplish the passing functions
as parameters.

For XSLT 1.0, 2.0 see the FXSL library.

The XSLT 3.0 / XPath 3.0 and 3.1 standards support higher order functions.

Cheers,
Dimitre

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

>
> Normally I would specify apply-template's mode as a literal, eg:
> <x:apply-templates mode="inputs" />
>
> I have a number of instances of similar code which need to have different
> modes, eg:
> <x:apply-templates mode="outputs" />
>
> I'd like to extract all of this into a separate block that I will call
> with these two values.
>
> <x:variable name="match-mode" >inputs</x:variable>
> <x:apply-templates mode="$match-mode" />
>
> Doesn't work.  Saxon reports:
> Static error at x:apply-templates on line 47 column 74 of xxx.xsl:
>   XTSE0020: Mode name {$match-mode} is not a valid QName
>
> OK, so it's a QName, not a string.
>
> So I try:
> <x:variable name="match-mode" as="xs:QName" >inputs</x:variable>
> <x:apply-templates mode="$match-mode" />
>
> Again giving:
> Static error at x:apply-templates on line 47 column 74 of
> AlarmsAllToDot.xsl:
>   XTSE0020: Mode name {$match-mode} is not a valid QName
>
> (xs is defined as xmlns:xs="http://www.w3.org/2001/XMLSchema" )
>
> So just telling it to be a QName doesn't seem to work.
> I think this syntax for variable means 'inputs' is a text node, so what
> about:
> <x:variable name="match-mode" as="xs:QName" select="'inputs'" />
> <x:apply-templates mode="$match-mode" />
>
> So do I need to do something more actively to generate a QName?
> There is a QName function, so how about:
>
> <x:variable name="match-mode" as="xs:QName" select="QName('', 'inputs')" />
> <x:apply-templates mode="$match-mode" />
>
> Giving me the same error.
>
> So, where am I gong wrong?
> The QName function takes two strings, the first being the namespace.  So
> is that wrong to be blank?
> Is "inputs" in my namespace?  Or is it XSLT's?
> Given that this will be fed directly to apply-templates, presumably it
> needs to be in XSLT's, so how about:
>
> <x:variable name="match-mode" as="xs:QName" select="QName('x', 'inputs')"
> />
> <x:apply-templates mode="$match-mode" />
>
> (x is defined as   xmlns:x="http://www.w3.org/1999/XSL/Transform")
>
> Giving the same error.
>
> Or is this about how it is presented to apply-templates?
> Am I right to use mode="$match-mode", or should that be done differently?
>
>
> So, I've tried a few options but I suspect there's something important I'm
> missing about QNames and the mode attribute.
> Please can someone advise.
>
> Regards,
> Richard.
>
>
>
>
>
> *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=9fb20d019e3e4cb99344d708709a3177&URL=mailto%3arichard.kerry%40atos.net>
>
>
> 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.[image: Atos logo]
>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/782854> (by
> email <>)
>


-- 
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
To avoid situations in which you might make mistakes may be the
biggest mistake of all
------------------------------------
Quality means doing it right when no one is looking.
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play
-------------------------------------
To achieve the impossible dream, try going to sleep.
-------------------------------------
Facts do not cease to exist because they are ignored.
-------------------------------------
Typing monkeys will write all Shakespeare's works in 200yrs.Will they write
all patents, too? :)
-------------------------------------
Sanity is madness put to good use.
-------------------------------------
I finally figured out the only reason to be alive is to enjoy it.

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.