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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] How do I pass the mode as, Kerry, Richard richa | Thread | Re: [xsl] How do I pass the mode as, Graydon graydon@xxxx |
Re: [xsl] How do I pass the mode as, David Farmer farmer@ | Date | Re: [xsl] How do I pass the mode as, Graydon graydon@xxxx |
Month |