Home > XSL-List Blog
The XSL-LIST BlogThe XSL-List Blog's mission is to increase the level of XSL knowledge and usage in the software development community. It's a service by Mulberry Technologies, and the list is by far the most popular XSL development forum in the world — in fact, some of the inventors of XSL hang out there and respond to questions. Got a stylesheet emergency? Want to contribute to the XSL community? visit the XSL-List blog today! Re: deep-equal behaves differently when node is storedPosted 4/15/2025 11:01:29 PMThank you very much, Martin and Michael! I was not aware of the differences you point out. W. On 4/15/25 18:13, Michael Kay michaelkay90@xxxxxxxxx wrote: Or if you really want to variable to contain a copy of the node, rather than the original, then in place of xsl:sequence you could do <xsl: . . . Read full entry » Re: deep-equal behaves differently when node is storedPosted 4/15/2025 10:12:41 PMOr if you really want to variable to contain a copy of the node, rather than the original, then in place of xsl:sequence you could do <xsl:variable name="person" as="node()"> <xsl:copy-of select="."/> </xsl:variable> But I find it hard to think of . . . Read full entry » Re: deep-equal behaves differently when node is storedPosted 4/15/2025 9:15:15 PMOn 15/04/2025 23:11, Wolfhart Totschnig wolfhart.totschnig@xxxxxxxxxxx wrote: Dear list, I would like to ask for your help with the following puzzling behavior that I have encountered. The situation is that I am testing whether the context node, which is a <person> element with child element . . . Read full entry » deep-equal behaves differently when node is stored inPosted 4/15/2025 9:10:37 PMDear list, I would like to ask for your help with the following puzzling behavior that I have encountered. The situation is that I am testing whether the context node, which is a <person> element with child elements (first?, middle?, last), is deep-equal to one of a set of other nodes. I . . . Read full entry » Re: Duplicate title issuePosted 4/15/2025 4:17:29 PMOn 15/04/2025 17:58, J.S. Rawat jogarawat@xxxxxxxxx wrote: > Hi team no one found the solution You posted some input, some expected output and some incomplete XSLT, without explaining or at least telling us in what way your XSLT fails. The use of xsl:result-document suggests you use at least . . . Read full entry » Re: Duplicate title issuePosted 4/15/2025 3:57:41 PMHi team no one found the solution On Wed, 9 Apr 2025, 18:26 J.S. Rawat jogarawat@xxxxxxxxx, < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > Hi Team, > I am facing duplicate topicref problem. Please help. > Output > <map id="d1e1" xml:lang="en-us"> & . . . Read full entry » [jats-list] upcoming XSLT coursePosted 4/14/2025 8:04:05 AMHello! Looks like i shall be running an XSLT course in May. We will start with the fundamentals and aim to build confidence, joy, and delight with writing and maintaining XSLT 1, 2 and 3. This course does not go into the advanced XSLT 3 features that i cover in the XSLT 3 course, but shows how th . . . Read full entry » Re: I desire this function: substring-before(string,Posted 4/14/2025 12:06:40 AMHi Roger, I desire this function: substring-before(string, regex charset) It's a shame that the value of $arg2 can't be a regex character set, e.g., You desire it, and guess what, contrary to your assertion, $arg2 *can* be a regex character. Just put the function together yourself, along lines . . . Read full entry » Re: I desire this function: substring-before(string,Posted 4/13/2025 4:16:22 PM> Here is a single XPath 4 expression (I am surprised scan-left isn't standard in XPath 3.1 ? !!!): And here is a single XPath 3.1 expression - had to define scan-left inline: let $scan-left := function($input as item()*, $init as item()*, $action as function(item() . . . Read full entry » Re: I desire this function: substring-before(string,Posted 4/13/2025 4:04:04 PMHi Roger, > Below is my XSLT solution. It uses the replace idea that Liam provided a few weeks back, which is neat. > Whereas the SNOBOL solution takes only 2 lines of code, the XSLT solution requires many lines of code. > Is there a simpler, shorter solution? Here is a single XPath 4 (I . . . Read full entry » Re: I desire this function: substring-before(string,Posted 4/13/2025 2:10:04 PMAm 13.04.2025 um 15:03 schrieb G. Ken Holman g.ken.holman@xxxxxxxxx: And, of course, the second function would just move the character class into the non-greedy search: B replace('THEN THE CURTAIN','(^.*?[AEIOU]).*$','$1') ... returns "THE". Or solely with a recursive function <xs . . . Read full entry » Re: I desire this function: substring-before(string,Posted 4/13/2025 1:56:03 PMAm 13.04.2025 um 15:03 schrieb G. Ken Holman g.ken.holman@xxxxxxxxx: And, of course, the second function would just move the character class into the non-greedy search: B replace('THEN THE CURTAIN','(^.*?[AEIOU]).*$','$1') ... returns "THE". If we use regular expression like <xsl: . . . Read full entry » Re: I desire this function: substring-before(string,Posted 4/13/2025 1:03:32 PMAnd, of course, the second function would just move the character class into the non-greedy search: replace('THEN THE CURTAIN','(^.*?[AEIOU]).*$','$1') ... returns "THE". At 13/04/2025 13:00 +0000, G. Ken Holman g.ken.holman@xxxxxxxxx wrote: Wouldn't the non-greedy '?' version of re . . . Read full entry » Re: I desire this function: substring-before(string,Posted 4/13/2025 12:59:44 PMWouldn't the non-greedy '?' version of regex in XPath help you here? replace('THEN THE CURTAIN FELL','(^.*?)[AEIOU].*$','$1') ... returns "TH". I hope this helps. But I haven't tested edge cases. . . . . . . Ken At 13/04/2025 12:43 +0000, Roger L Costello costello@xxxxxxxxx wrote: Hi . . . Read full entry » I desire this function: substring-before(string, regexPosted 4/13/2025 12:42:29 PMHi Folks, The XPath substring-before function returns "that part of the given input string that occurs before the first occurrence of the string given in $arg2." [definition from SAXON web page] substring-before($arg1 as xs:string?, $arg2 as xs:string?) --> xs:string It's a shame th . . . Read full entry » Re: Flatten DITA conrefsPosted 4/13/2025 12:30:59 AMThank you for the updated code. It was a mistake to return an empty sequence in my original code. Yours makes sense. Thank you also for the feedback on the Boolean functions. From: Michael Kay michaelkay90@xxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Sent: Saturday, April 12, 2025 3 . . . Read full entry » Re: Flatten DITA conrefsPosted 4/12/2025 5:01:03 PMI was waiting for one of the DITA pros to ask...why not use DITA-OT [1]? As you probably know, the DITA processing rules are wonderfully complex to accommodate a variety of input structures and specializations. Any home-grown solution is likely to be limited to special cases of predictable inpu . . . Read full entry » Re: Flatten DITA conrefsPosted 4/12/2025 3:28:59 PMAccording to the DITA specification, following CASMessages.dita concept topic is valid even if the @id="AFM-L-R-CAI-Selected-Off-status" attribute is duplicated. Only the concept/@id is defined as ID. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE concep . . . Read full entry » Re: Flatten DITA conrefsPosted 4/12/2025 7:50:19 AM>bJavaScript: The Good Partsb and his counsel was to be as explicit as possible when programming so I like to use true() and false() when making comparisons. There's something to be said for avoiding reliance on "effective boolean value" conversions, but when you're testing the res . . . Read full entry » Re: Flatten DITA conrefsPosted 4/11/2025 10:24:44 PMThanks for the input, Martin. One of the influential programming books I read was, bJavaScript: The Good Partsb and his counsel was to be as explicit as possible when programming so I like to use true() and false() when making comparisons. id values are not required on all DITA elements, so I am . . . Read full entry » Re: Flatten DITA conrefsPosted 4/11/2025 10:06:38 PMOn 11/04/2025 21:21, rick@xxxxxxxxxxxxxx wrote: > > Hi All, > > I am working with a DITA transformation and I want to flatten some > conrefs. I have created a function to do this, and it is working, but > I am looking for feedback to see if there is a better approach. Here > is . . . Read full entry » Flatten DITA conrefsPosted 4/11/2025 7:21:30 PMHi All, I am working with a DITA transformation and I want to flatten some conrefs. I have created a function to do this, and it is working, but I am looking for feedback to see if there is a better approach. Here is my XML: <?xml version="1.0" encoding="UTF-8"?> &l . . . Read full entry » Re: Pointers are weirdPosted 4/11/2025 5:51:34 PMThank you Elliotte. Roger, if you want to understand pointers, have a look at C or Assembly language. Indirection, double indirection are a little more clear than XML. regards On Fri, 11 Apr 2025 at 18:42, Elliotte Rusty Harold elharo@xxxxxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> . . . Read full entry » Re: Pointers are weirdPosted 4/11/2025 5:42:22 PMNo. XML does not have pointers, any more than it has ints or booleans. Elliotte Rusty Harold elharo@xxxxxxxxxxx On Fri, Apr 11, 2025 at 6:31b/AM Roger L Costello costello@xxxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > Hi Folks, > > Occasionally friends come over to . . . Read full entry » Re: Pointers are weirdPosted 4/11/2025 1:20:36 PMRoger, In HTML you can either reference a graphic with something like bimage.pngb or you can literally paste the base64 encoded image directly into the HTML as src=. Both the ref and the image are data. If you ask for the reference value you will get the 9 character string bimage.pngb. bim . . . Read full entry » Re: Pointers are weirdPosted 4/11/2025 11:58:00 AMHello Roger, Here BELOW is a piece of disassembled code, from my archives, of very long ago ;-) , in another life ...) if the same byte could not be interpreted either as data or as pointer or as instruction depending on where "WE" are ... no microprocessor would function :-) It is . . . Read full entry » Re: Pointers are weirdPosted 4/11/2025 11:05:36 AMUnless the reference was "Roger the Shrubber". Now that would be weird. Don Yahoo Mail: Search, Organize, Conquer On Fri, Apr 11, 2025 at 5:50 AM, Michael Kay michaelkay90@xxxxxxxxx<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > Isn't that weird? > > /Roge . . . Read full entry » Re: Pointers are weirdPosted 4/11/2025 10:55:20 AMOn 11/04/2025 11:32, Roger L Costello costello@xxxxxxxxx wrote: XML has pointers, e.g., <Book ref="SK">...</Book> <Author id="SK">Stephen King</Author> The value of the ref attribute, "SK", points to <Author id="SK"> "SK . . . Read full entry » Re: Pointers are weirdPosted 4/11/2025 10:50:47 AM> Isn't that weird? > > /Roger No weirder than when you refer to yourself as "Roger". Michael Kay Saxonica . . . Read full entry » Re: Pointers are weirdPosted 4/11/2025 10:38:56 AM> On 11 Apr 2025, at 11:32, Roger L Costello costello@xxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > I conclude that, in XML and HTML, a pointer is not a pointer at all. It's data. It's data that is repeated elsewhere in the document: ("SK" ... "SK" . . . Read full entry » Pointers are weirdPosted 4/11/2025 10:31:49 AMHi Folks, Occasionally friends come over to my home and I take them on a walk around the neighborhood. When I see some thing interesting, I raise my hand and position my index finger in the direction of the interesting thing. That is, I point at the interesting thing. It seems to me, that that is . . . Read full entry » Duplicate title issuePosted 4/9/2025 12:56:14 PMHi Team, I am facing duplicate topicref problem. Please help. Output <map id="d1e1" xml:lang="en-us"> <title>1.0 Electrical</title> <topicref1 navtitle="1.0 Electrical" href="electrical.dita"> <topicref4 navtitle="1 . . . Read full entry » Re: Indirect referencing in XSLT/XPath?Posted 4/5/2025 10:13:51 PMOn Sat, 2025-04-05 at 14:35 +0000, Roger L Costello costello@xxxxxxxxx wrote: > Hi Folks, > > The SNOBOL language has a wicked cool indirect referencing > capability. Is there an indirect referencing capability in > XSLT/XPath? . In XPath 3 you can use anonymous functions to wrap va . . . Read full entry » Re: Indirect referencing in XSLT/XPath?Posted 4/5/2025 8:23:23 PMPeter's solution is nice. I revised his XML to be consistent with my original post: <Document> <AIRCRAFT xml:id="AIRCRAFT" ref="ALTITUDE"/> <ALTITUDE xml:id="ALTITUDE" ref="UNITS"/> <UNITS xml:id="UNITS">FLIGHT_L . . . Read full entry » Re: Indirect referencing in XSLT/XPath?Posted 4/5/2025 8:15:45 PMlet $aircraft := map {"altitude": map {"units" : "Flight_Level"} } return $aircraft?altitude?units Ah, that works perfect. Thank you, Martin. /Roger . . . Read full entry » Re: Indirect referencing in XSLT/XPath?Posted 4/5/2025 8:08:16 PMOn 05/04/2025 22:01, Roger L Costello costello@xxxxxxxxx wrote: Hello Dimitre, I ran your solution: let $aircraft := {"altitude": {"units" : "Flight_Level"} } return $aircraft?altitude?units in the Oxygen XPath bar and it gave me this error message: Unexpect . . . Read full entry » Re: Indirect referencing in XSLT/XPath?Posted 4/5/2025 8:00:52 PMHello Dimitre, I ran your solution: let $aircraft := {"altitude": {"units" : "Flight_Level"} } return $aircraft?altitude?units in the Oxygen XPath bar and it gave me this error message: Unexpected token "{" at start of expression. Do you know what is cau . . . Read full entry » Re: Indirect referencing in XSLT/XPath?Posted 4/5/2025 7:22:43 PM> Is there any way to do indirect referencing in XSLT/XPath? Yes, but not assignments, as in XPath any created variable is immutable. For your particular example: let $aircraft := {"altitude": {"units" : "Flight_Level"} } return $aircraft?altitude?units produc . . . Read full entry » Re: Indirect referencing in XSLT/XPath?Posted 4/5/2025 5:49:05 PMOn 05/04/2025 15:35, Roger L Costello costello@xxxxxxxxx wrote: Is there any way to do indirect referencing in XSLT/XPath? The following returns the value "this". Is that the kind of thing you meant? Peter ======================== test.xml <test> <thing xml:id="foo" . . . Read full entry » Re: Indirect referencing in XSLT/XPath?Posted 4/5/2025 4:24:05 PMOn 05/04/2025 16:35, Roger L Costello costello@xxxxxxxxx wrote: Is there any way to do indirect referencing in XSLT/XPath? I think it would boil to having a parser and an evaluator that perhaps uses xsl:evaluate the number of times you findB a $ in front of what would be an variable/parameter na . . . Read full entry » Indirect referencing in XSLT/XPath?Posted 4/5/2025 2:35:32 PMHi Folks, The SNOBOL language has a wicked cool indirect referencing capability. Is there an indirect referencing capability in XSLT/XPath? Here is a brief description of SNOBOL's indirect referencing capability: First, let's assign UNITS the string METERS UNITS = "METERS" In that st . . . Read full entry » XSL-List GuidelinesPosted 4/1/2025 3:01:29 PMThis information is posted to the XSL-List (and the XSL-List Digest) at intervals under the subject line "XSL-List guidelines". INTRODUCTION TO XSL-LIST XSL-List hosts discussion of XSL itself, XSL applications and implementation, and XSL user questions. XSL-List is open to everyone, us . . . Read full entry » [ANN] Reminder: Balisage paper submissions due 4 AprilPosted 3/31/2025 3:56:55 PMCall for Participation "Balisage: The Markup Conference 2025b Balisage: ALL VIRTUAL, LIVE, TECHNICAL, INTERACTIVE Balisage: where serious markup practitioners and theoreticians meet every summer. Critical Dates - 4 April 2025 b Paper submissions due - 4 b 8 August 2025 b BALISAGE: THE . . . Read full entry » Re: Finding an element without a particular attribute?Posted 3/28/2025 5:51:54 PM>I turn the value of the @key attribute into the element's name (supposing it is a NCName) and add a type attribute to reflect that it was an array, a map, a string, etc.. We often have a choice here: use an element name to say what kind of thing you've got, and an attribute to say what role it . . . Read full entry » Re: Finding an element without a particular attribute?Posted 3/28/2025 5:30:06 PMSorry about the hard spaces, introduced somehow when copy-pasting. They only became apparent when I received my own message. Computers.... Pieter Op 28 mrt 2025, 18:18, om 18:18, "Pieter Masereeuw pieter@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> schreef: >I recog . . . Read full entry » Re: Finding an element without a particular attribute?Posted 3/28/2025 5:18:18 PMI recognize your problem. I mitigate it by some preprocessing (in an XProc pipeline, but anything else will do). In the preprocessing, I turn the value of the @key attribute into the element's name (supposing it is a NCName) and add a type attribute to reflect that it was an array, a map, a str . . . Read full entry » Re: Finding an element without a particular attribute?Posted 3/28/2025 5:13:54 PMHello, Except for at the top, in this model, 'map[not(@key)]' (or 'map[empty(@key)]' if you like) happens to coincide with 'array/map'. This is due to a property of JSON, namely that map properties (of any type) have keys, but not array members (of any type). If this is obvious or intrusive to n . . . Read full entry » Re: Finding an element without a particular attribute?Posted 3/28/2025 4:39:11 PMOn Fri, 28 Mar 2025 at 16:30, dvint@xxxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > I'm processing content produced with json-to-xml(). So there are a buch > of <map> elements. Many have the @key attribute and are easy to match. > I'm drawing a blank on how to fi . . . Read full entry » Finding an element without a particular attribute?Posted 3/28/2025 4:30:07 PMI'm processing content produced with json-to-xml(). So there are a buch of <map> elements. Many have the @key attribute and are easy to match. I'm drawing a blank on how to find map elements without the @key. <map key="mime"> <string key="type">array</ . . . Read full entry » Re: Help regarding xsl:for-each-groupPosted 3/27/2025 3:33:58 PMthanks Michael, I tried above code, but the result is as below" <idxentry id="idx1"><ie_f>Paragraph</ie_f><ie_s>Paragraph</ie_s><ie_t>Paragraph </ie_t></idxentry> <idxentry id="idx2"><ie_f>Entry1</ie_f><i . . . Read full entry » Re: Help regarding xsl:for-each-groupPosted 3/26/2025 5:27:16 PMI think you want something along the lines <xsl:for-each-group select="*" group-starting-with="w:p[.//@w:val='Indexentry']"> <idxentry id="idx{position()}"> <ie_t><xsl:value-of select=".//w:t"/></ie_t> <xsl:for . . . Read full entry » Re: Help regarding xsl:for-each-groupPosted 3/26/2025 5:27:16 PMI think you want something along the lines <xsl:for-each-group select="*" group-starting-with="w:p[.//@w:val='Indexentry']"> <idxentry id="idx{position()}"> <ie_t><xsl:value-of select=".//w:t"/></ie_t> <xsl:for . . . Read full entry » Help regarding xsl:for-each-groupPosted 3/26/2025 4:37:21 PMHi All, I have generated the below output by another method in xsl version 1.0. Can we get this result by using for-each-group. INPUT <w:body> <w:p><w:pPr><w:pStyle w:val="ParaFL"/></w:pPr><w:r><w:t>Paragraph</w:t></w:r></w:p> & . . . Read full entry » [ANN] Version 27.1 of the Oxygen XML Suite of ProductsPosted 3/25/2025 8:36:27 AMHi everyone, We are excited to announce that Oxygen XML Developer/Editor version 27.1 is now available! Listing below some new features which may be useful for the XSL community: XSLT/XQuery ================================== * Oxygen now supports configuring a custom parser when transforming . . . Read full entry » Re: Replace the portion of text that matches pattern:Posted 3/24/2025 11:21:25 AMInventiveness requires constraint. Cheers, Wendell On Sun, Mar 23, 2025 at 7:57b/AM David Carlisle d.p.carlisle@xxxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > > On Sun, 23 Mar 2025 at 11:16, Michael Kay michaelkay90@xxxxxxxxx < > xsl-list-service@xxxxxxxxxx . . . Read full entry » Re: Replace the portion of text that matches pattern:Posted 3/23/2025 11:57:23 AMOn Sun, 23 Mar 2025 at 11:16, Michael Kay michaelkay90@xxxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > > > > > I'd probably have used > > > > > > replace($WORD, '^([^A]*)A', '$1E') > > > > But that relies on doing a negative mat . . . Read full entry » Re: Replace the portion of text that matches pattern:Posted 3/23/2025 11:16:01 AM> I'd probably have used > > > replace($WORD, '^([^A]*)A', '$1E') > But that relies on doing a negative match, which is tricky to achieve it it's more than one character you're trying to replace. Michael Kay Saxonica . . . Read full entry » Re: Replace the portion of text that matches pattern:Posted 3/23/2025 10:57:43 AMDavid Carlisle provided these simpler replace() functions for obtaining the first occurrence of pattern in WORD: replace($WORD, '^(.*?)A', '$1E') replace($WORD, '^([^A]*)A', '$1E') Awesome. Thank you, David. . . . Read full entry » Re: Replace the portion of text that matches pattern:Posted 3/23/2025 10:41:53 AMRoger, > replace($WORD, concat('(^.*?)', 'A'), concat('$1','E')) is making it look more complicated the it needs to be, you don't need to use concat (you may want to build up the expression but that's a separate issue), and it's not any special trick just a normal regex replace as used in xpat . . . Read full entry » Re: Replace the portion of text that matches pattern:Posted 3/23/2025 10:23:50 AMThank you, Martin, and Liam for your excellent feedback. I updated my writeup to incorporate Martin and Liam's feedback. See below. If you see any errors in the writeup, please let me know. -------------------------------------------------------- Sometimes you want to search for occurrences of a p . . . Read full entry » Re: Replace the portion of text that matches pattern:Posted 3/22/2025 5:35:44 PMOn Sat, 2025-03-22 at 12:03 +0000, Roger L Costello costello@xxxxxxxxx wrote: > > Suppose that you want to only replace the first match, i.e., we want > "BELANCE." I do not think that there is any way to configure the > XPath replace() function to "Replace only the first . . . Read full entry » Re: Replace the portion of text that matches pattern:Posted 3/22/2025 1:00:01 PMOn 22/03/2025 13:03, Roger L Costello costello@xxxxxxxxx wrote: Suppose that you want to only replace the first match, i.e., we want "BELANCE." I do not think that there is any way to configure the XPath replace() function to "Replace only the first match." Please correct me if . . . Read full entry » Re: Replace the portion of text that matches pattern:Posted 3/22/2025 12:28:10 PMOn 22/03/2025 13:03, Roger L Costello costello@xxxxxxxxx wrote: Suppose that you want to only replace the first match, i.e., we want "BELANCE." I do not think that there is any way to configure the XPath replace() function to "Replace only the first match." It might be a bit con . . . Read full entry » Replace the portion of text that matches pattern: XPatPosted 3/22/2025 12:03:15 PMSometimes you want to search for occurrences of a pattern in text and replace those substrings that match the pattern. For example, suppose WORD holds the text, "BAT" and we want to search for the pattern 'A' and replace it with 'E.' In XPath use the replace() function. The following XPat . . . Read full entry » Re: Best practices when reorganizing content?Posted 3/21/2025 10:11:39 PMI've been studying this problem for a while now, and I think I have some of the answers but not all. XSLT 3.0 is certainly not especially good at processing JSON in the "recursive descent" style using template rules. One of the problems, as you say, is the absence of element names; anothe . . . Read full entry » Re: Best practices when reorganizing content?Posted 3/21/2025 9:13:50 PMOn 21/03/2025 21:37, dvint@xxxxxxxxx wrote: The other issues is that the content doesn't have any sort of model/scheam/dtd that is used to validate the results and it looks like anyone can add any structure (or not follow existing patterns) when ever they want. This structure has morphed over the l . . . Read full entry » Re: Best practices when reorganizing content?Posted 3/21/2025 8:44:36 PMOn Fri, 21 Mar 2025 at 20:37, dvint@xxxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > My general stylesheet design is to try and leverage templates that match > things and produce output as they are found in the document order. In > some cases the templates will process . . . Read full entry » Best practices when reorganizing content?Posted 3/21/2025 8:37:01 PMMy general stylesheet design is to try and leverage templates that match things and produce output as they are found in the document order. In some cases the templates will process the content and other times it will ignore/hide the content. If I'm worried the format will evolve I'll try and ad . . . Read full entry » Re: XML to Json and escaped charactersPosted 3/18/2025 8:07:01 PMThanks, that did the trick, I was seeing it appear as text so wasn't think of it as tabs and newlines.Sent from my Verizon, Samsung Galaxy smartphone -------- Original message --------From: "Michael Kay michaelkay90@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: 3/18/25 . . . Read full entry » Re: XML to Json and escaped charactersPosted 3/18/2025 6:10:54 PMOn 18/03/2025 18:56, dvint@xxxxxxxxx wrote: I checked the spec for xml-to-json() Note that the version 4 of that function allows an option to prevent escaping the slash/solidus e.g. xml-to-json(<string key="data" xmlns="http://www.w3.org/2005/xpath-functions">http://exam . . . Read full entry » Re: XML to Json and escaped charactersPosted 3/18/2025 6:00:16 PMThe regular expression `\t` matches tab characters. To match the escape sequence `\t`, you want the regular expression `\\t`. Michael Kay Saxonica > On 18 Mar 2025, at 17:56, dvint@xxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > I've recently started working with jso . . . Read full entry » XML to Json and escaped charactersPosted 3/18/2025 5:55:59 PMI've recently started working with json-to-xxml() to create a conversion to asciidoc format for documentation. I've now found a need to take some of that generated XML back to JSON as it is an actual example for an API call. Here is an XML snippet: <map key="actionCodes"> < . . . Read full entry » Re: Can I create a key on elements in a non-primary XMPosted 3/16/2025 3:32:48 PM> Thank you, Martin. I implemented both versions and found that my XSLT program runs a little bit faster with the second one (22 seconds versus 21 seconds). Is there a reason for why the second one is a little faster? Unless you are doing very careful microbenchmarking, that's well within the . . . Read full entry » Re: Can I create a key on elements in a non-primary XMPosted 3/16/2025 2:45:29 PMMartin wrote: > key('key-name', key-expression, $doc1) > or > $doc1 ! key('key-name', key-expression) Thank you, Martin. I implemented both versions and found that my XSLT program runs a little bit faster with the second one (22 seconds versus 21 seconds). Is there a reason for why th . . . Read full entry » Re: Can I create a key on elements in a non-primary XMPosted 3/16/2025 2:25:54 PMOn 16/03/2025 15:20, Roger L Costello costello@xxxxxxxxx wrote: Is it possible to create and use a key for a non-primary XML document? Yes, just understand that the key declaration doesn't name any document, does not refer to any document so just declare as you would declare it for a primary docu . . . Read full entry » Can I create a key on elements in a non-primary XML dPosted 3/16/2025 2:20:13 PMHi Folks, When I run my XSLT program, I provide it with an input XML document. I call that input XML document the "primary XML document." I successfully created keys on elements in the primary XML document. My XSLT program must also retrieve data from another, non-primary, XML document. . . . Read full entry » Re: Help, my problem is n-cubed ... and so is my XSLTPosted 3/16/2025 12:12:41 AM> I have. The performance benefits of using keys are substantial. > > I have two versions of a program to join the <row> elements in <ARPT> with the row elements in <ANAV> with the <row> elements in <BDRY>: > > 1. The first version uses an xsl:for-each w . . . Read full entry » Re: Help, my problem is n-cubed ... and so is my XSLTPosted 3/15/2025 10:38:03 PM> Haven't measured it [the performance benefits of keys] though. I have. The performance benefits of using keys are substantial. I have two versions of a program to join the <row> elements in <ARPT> with the row elements in <ANAV> with the <row> elements in <BDRY> . . . Read full entry » Re: Help, my problem is n-cubed ... and so is my XSLTPosted 3/15/2025 9:58:59 PMOn Fri, Mar 14, 2025 at 04:48:23PM -0000, Michael Kay mike@xxxxxxxxxxxx scripsit: > > Tangentially, is there a use case where xsl:key is expected to be > > preferable in performance terms to using maps? > > No, I don't think so. Some people may find keys more intuitive, and they' . . . Read full entry » Re: How to create xsl:key that has a composite value iPosted 3/15/2025 9:27:32 PMIndeed (now having tested my faulty memory), to gloss further what Dimitre has just explained, with this input <dir> <cars> <car vin="101" color="red"/> <car vin="102" color="green"/> <car vin="103& . . . Read full entry » Re: How to create xsl:key that has a composite value iPosted 3/15/2025 8:45:02 PM> It definitely does not work in XSLT 1.0 even when using concat(). > The reason is that in XPath 1.0 it is invalid to have an path-step be a function call, > so key() cannot be a step in the proposed XPath expression - not in XPath 1.0. What works even with XSLT 1.0 is this (just the rel . . . Read full entry » Re: How to create xsl:key that has a composite value iPosted 3/15/2025 8:31:11 PMWendell, > Where you have > > key('kBoundaryForNav', key('kNavForAirport', ARPT_IDENT)/(NAV_IDENT || '+' || NAV_CTRY || '+' || NAV_TYPE))/BDRY_IDENT > > could not this be > > key('kNavForAirport', ARPT_IDENT) / key('kBoundaryForNav', (NAV_IDENT || '+' || NAV_CTRY || '+' || . . . Read full entry » Re: How to create xsl:key that has a composite value iPosted 3/15/2025 7:49:20 PMDimitre, Where you have key('kBoundaryForNav', key('kNavForAirport', ARPT_IDENT)/(NAV_IDENT || '+' || NAV_CTRY || '+' || NAV_TYPE))/BDRY_IDENT could not this be key('kNavForAirport', ARPT_IDENT) / key('kBoundaryForNav', (NAV_IDENT || '+' || NAV_CTRY || '+' || NAV_TYPE) ) / BDRY_IDENT which . . . Read full entry » Re: How to create xsl:key that has a composite value iPosted 3/15/2025 5:50:55 PMI would use even this (can be XSLT 2.0 if || is done using concat() ): <xsl:stylesheet version="3.0" xmlns:xsl=" http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:key name="kNavForAirport&qu . . . Read full entry » Re: How to create xsl:key that has a composite value iPosted 3/15/2025 4:53:10 PMMartin provided this solution to joining three tables (ARPT --> ANAV --> BDRY): ------------------------------------------------- <xsl:sequence select=" key('ARPT-to-ANAV', ARPT_IDENT) ! key('ANAV-to-BDRY',(NAV_IDENT,NAV_CTRY,NAV_TYPE))[TYPE eq '08']/BDRY_IDENT" /> -- . . . Read full entry » Re: How to create xsl:key that has a composite value iPosted 3/15/2025 4:27:02 PMOn 15/03/2025 17:19, Roger L Costello costello@xxxxxxxxx wrote: <xsl:template match="ARPT/ARPT/row"> <result> <xsl:for-each select="key('ARPT-to-ANAV', ARPT_IDENT)"> <xsl:sequence select="key('ANAV-to-BDRY',(NAV_IDENT,NAV_C . . . Read full entry » Re: How to create xsl:key that has a composite value iPosted 3/15/2025 4:18:38 PMThank you, Martin for pushing me to create a simple sample input XML document along with the XSLT program. I have done so but cannot replicate the problem that I described earlier. However, I uncovered another problem that I hope you can help me with. Previously I described a join between the < . . . Read full entry » Re: How to create xsl:key that has a composite value iPosted 3/15/2025 2:34:02 PMOn 15/03/2025 15:22, Roger L Costello costello@xxxxxxxxx wrote: Thank you. Below is a sample input document. The ANAV row with NAV_IDENT = HUM, NAV_CTRY = AR, NAV_TYPE = 1 matches two BDRY row elements and the result should be: <result> <BDRY_IDENT>Boundary 1</BDRY_IDENT> . . . Read full entry » Re: How to create xsl:key that has a composite value iPosted 3/15/2025 2:25:23 PMOn 15/03/2025 15:22, Roger L Costello costello@xxxxxxxxx wrote: Thank you. Below is a sample input document. The ANAV row with NAV_IDENT = HUM, NAV_CTRY = AR, NAV_TYPE = 1 matches two BDRY row elements and the result should be: <result> <BDRY_IDENT>Boundary 1</BDRY_IDENT> . . . Read full entry » Re: How to create xsl:key that has a composite value iPosted 3/15/2025 2:22:33 PMHello Martin, Thank you. Below is a sample input document. The ANAV row with NAV_IDENT = HUM, NAV_CTRY = AR, NAV_TYPE = 1 matches two BDRY row elements and the result should be: <result> <BDRY_IDENT>Boundary 1</BDRY_IDENT> <BDRY_IDENT>Boundary 2</BDRY_IDENT> . . . Read full entry » Re: How to create xsl:key that has a composite value iPosted 3/15/2025 2:06:23 PMOn 15/03/2025 14:19, Roger L Costello costello@xxxxxxxxx wrote: <result> <xsl:sequence select="key('ANAV-to-BDRY', (NAV_IDENT, NAV_CTRY, NAV_TYPE))/BDRY_IDENT"/> </result> That must be incorrect because the <result> element is erroneously populated with a < . . . Read full entry » How to create xsl:key that has a composite value in itPosted 3/15/2025 1:19:36 PMHi Folks, I have an XML document that contains <row> elements within a <BDRY> element: <BDRY> <row> <BDRY_IDENT>ABC</BDRY_IDENT> <NAV_IDENT>VOR1</NAV_IDENT> <NAV_CTRY>US</NAV_CTRY> <NAV_TYPE>1< . . . Read full entry » Re: Help, my problem is n-cubed ... and so is my XSLTPosted 3/14/2025 9:46:15 PMOn Fri, 2025-03-14 at 15:57 +0000, Roger L Costello costello@xxxxxxxxx wrote: > Hi Folks, > > My XSLT code must process N airport records. > > For each airport record, I must search through M air-nav records and > collect those that match on the ARPT_IDENT field. ok, so //record[ . . . Read full entry » Re: Json to xmlPosted 3/14/2025 7:12:23 PMOn 14/03/2025 20:08, dvint@xxxxxxxxx wrote: I was just going to post that I found a way using tunnel paramters. I added this template in the included XSLT file and it does the trick because at this point I am now only dealing with XML content. B B B B <xsl:template match="/"> B B B . . . Read full entry » Re: Json to xmlPosted 3/14/2025 7:08:30 PMI was just going to post that I found a way using tunnel paramters. I added this template in the included XSLT file and it does the trick because at this point I am now only dealing with XML content. <xsl:template match="/"> <xsl:apply-templates> <xsl:with-param na . . . Read full entry » Re: Json to xmlPosted 3/14/2025 7:01:09 PMOn 14/03/2025 18:20, dvint@xxxxxxxxx wrote: In trying to build a small sample I have found where the problem is coming from. It looks like this might be a timing issue of when the stylesheet is read vs when the json-to-sml() file is triggered and that XML becomes available to evaluate. At the top o . . . Read full entry » Re: Json to xmlPosted 3/14/2025 6:50:35 PMIt is only processing one document, but the format is changing based upon the fact it is taken through the json-to-xml() which then changes how it us processed. Is there someway to get the json-to-xml() to be run before anything else starts?..danSent from my Verizon, Samsung Galaxy smartphone ----- . . . Read full entry » Re: Json to xmlPosted 3/14/2025 6:38:53 PMI'm trying to do something like this now: <xsl:variable name="PROERPTIES"> <xsl:if test="$RUNWITH='XML'"> <xsl:value-of select="/j:map/j:map[@key='properties']"/> </xsl:if> <xsl:if test="$RUNWITH='JSON'"> <xsl:va . . . Read full entry » Re: Help, my problem is n-cubed ... and so is my XSLTPosted 3/14/2025 5:35:01 PM> I would still think that XSLT 3 with composite keys > xsl:key name="key-name" match="foo" use="bar, baz" composite="yes" is easier than doing that with a map. Yes, nested-maps can be tricky. We have a proposal to allow as keys of a map not only atom . . . Read full entry » Re: Json to xmlPosted 3/14/2025 5:26:57 PMA global variable is always evaluated with the principal source document as the context item. If you're running with multiple documents, e.g. a multi-phase transformation, then it's best to avoid relying on this and instead always use global variables to refer to each document explicitly. Michael . . . Read full entry » Re: Json to xmlPosted 3/14/2025 5:20:24 PMIn trying to build a small sample I have found where the problem is coming from. It looks like this might be a timing issue of when the stylesheet is read vs when the json-to-sml() file is triggered and that XML becomes available to evaluate. At the top of the included XSLT is this <!-- R . . . Read full entry » Re: Help, my problem is n-cubed ... and so is my XSLTPosted 3/14/2025 4:49:15 PMOn 14/03/2025 17:37, Graydon graydon@xxxxxxxxx wrote: > On Fri, Mar 14, 2025 at 04:26:54PM -0000, Michael Kaymichaelkay90@xxxxxxxxx scripsit: >> Three options: >> >> (a) use xsl:key >> >> (b) use an XSLT processor that optimizes joins (such as Saxon-EE) (but you may . . . Read full entry » Re: Help, my problem is n-cubed ... and so is my XSLTPosted 3/14/2025 4:48:17 PM> Tangentially, is there a use case where xsl:key is expected to be > preferable in performance terms to using maps? No, I don't think so. Some people may find keys more intuitive, and they're probably easier to manage if you need one-index-per-document with multiple documents, but I don't . . . Read full entry » Re: Help, my problem is n-cubed ... and so is my XSLTPosted 3/14/2025 4:37:12 PMOn Fri, Mar 14, 2025 at 04:26:54PM -0000, Michael Kay michaelkay90@xxxxxxxxx scripsit: > Three options: > > (a) use xsl:key > > (b) use an XSLT processor that optimizes joins (such as Saxon-EE) (but you may need to write the search using predicates, not using xsl:for-each and xsl:i . . . Read full entry » Re: Help, my problem is n-cubed ... and so is my XSLTPosted 3/14/2025 4:26:47 PMThree options: (a) use xsl:key (b) use an XSLT processor that optimizes joins (such as Saxon-EE) (but you may need to write the search using predicates, not using xsl:for-each and xsl:if) (c) build your own indexes as maps, as you suggest. Michael Kay > On 14 Mar 2025, at 15:57, Roger L Cos . . . Read full entry » Help, my problem is n-cubed ... and so is my XSLT codePosted 3/14/2025 3:57:12 PMHi Folks, My XSLT code must process N airport records. For each airport record, I must search through M air-nav records and collect those that match on the ARPT_IDENT field. For each matched air-nav record, I must search through O boundary records and collect those that match on the NAV_IDENT, N . . . Read full entry » Re: Analyzing text by extracting substrings that matchPosted 3/14/2025 9:52:37 AMIt isn't clear if you are just looking for xpath solutions or if xsl is OK. xsl:analyze-string was introduced for exactly this kind of use, it gives access to each substring matched by a ()-group in the regex. Newer xpath versions even have an xpath version of this as well https://qt4cg.org/spe . . . Read full entry » Re: Json to xmlPosted 3/14/2025 6:55:11 AMOn 13/03/2025 19:25, dvint@xxxxxxxxx wrote: I'll try and see if I can make a small sample JSON and associated included XSLT. Please do that, I couldn't see any obviuous mistakes in the code you posted. . . . Read full entry » Re: Analyzing text by extracting substrings that matchPosted 3/13/2025 11:31:25 PMOn Thu, 2025-03-13 at 22:01 +0000, Roger L Costello costello@xxxxxxxxx wrote: > > In my opinion, SNOBOL provides a superior solution to the task of > extracting the substring of TEXT that matches PATTERN. This is not really a surprise - SNOBOL was a pattern matching language. On the othe . . . Read full entry » Re: Analyzing text by extracting substrings that matchPosted 3/13/2025 10:43:25 PMI missed the first part of this thread, so I need to look back at that.B Snobol matches what it calls patterns which are different from regular expressions. And I think up until recently, regular expressions have only just now caught up with the expressiveness of pattern matching. But thatbs just . . . Read full entry » Re: Analyzing text by extracting substrings that matchPosted 3/13/2025 10:24:10 PMOn 13/03/2025 23:01, Roger L Costello costello@xxxxxxxxx wrote: > In my opinion, SNOBOL provides a superior solution to the task of extracting the substring of TEXT that matches PATTERN. It has some superior anecdote about is planned name (https://en.wikipedia.org/wiki/SNOBOL): According t . . . Read full entry » Re: Analyzing text by extracting substrings that matchPosted 3/13/2025 10:12:35 PMIf you think SNOBOL provides a superior solution, why donbt you just use a current implementation of SNOBOL for that step? John Lumley Sent from my iPad > On 13 Mar 2025, at 22:01, Roger L Costello costello@xxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > In my opini . . . Read full entry » Analyzing text by extracting substrings that match regPosted 3/13/2025 10:00:57 PMOne way of analyzing text is to look for patterns in the text-find the substrings that match the patterns. The following XPath determines if the string in $TEXT contains a vowel: matches($TEXT, 'A|E|I|O|U') If there is a match then which vowel was matched? A? E? I? O? or U? It may be desirable t . . . Read full entry » Json to xmlPosted 3/13/2025 6:24:42 PMI'm trying this for the forst time and it is generally working well, but I've come up with an odd result. My main stylesheet looks like this: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs=&q . . . Read full entry » Re: How to use xsl:key to make my XSLT program super-Posted 3/12/2025 1:11:13 PMOn Wed, Mar 12, 2025 at 12:56:41PM -0000, Roger L Costello costello@xxxxxxxxx scripsit: > > Is this a change-the-element-names process or a rearrange-the-data > > process? > > Both. > > The elements in the target XML will contain data that is from diverse > elements (th . . . Read full entry » Re: How to use xsl:key to make my XSLT program super-Posted 3/12/2025 12:56:35 PMHello Graydon, > Is this a change-the-element-names process or a rearrange-the-data process? Both. The elements in the target XML will contain data that is from diverse elements (that have been substring'ed, length'ed, multiplied, divided, rounded, massaged) in the source XML. /Roger . . . Read full entry » Re: How to use xsl:key to make my XSLT program super-Posted 3/12/2025 12:46:40 PMOn Wed, Mar 12, 2025 at 11:50:52AM -0000, Roger L Costello costello@xxxxxxxxx scripsit: > I have a huge (1.2GB) XML document containing air navigation data. I > need to convert the XML document to another XML format, i.e., it is an > XML-to-XML translation task. ... > My XSLT needs to b . . . Read full entry » Re: How to use xsl:key to make my XSLT program super-Posted 3/12/2025 12:04:40 PMOn Wed, 12 Mar 2025 at 11:50, Roger L Costello costello@xxxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > Hi Folks, > > I have a huge (1.2GB) XML document containing air navigation data. I need > to convert the XML document to another XML format, i.e., it is an > X . . . Read full entry » Re: How to use xsl:key to make my XSLT program super-Posted 3/12/2025 12:01:02 PM> Am 12.03.2025 um 12:51 schrieb Roger L Costello costello@xxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>: > > Hi Folks, > > I have a huge (1.2GB) XML document containing air navigation data. I need to convert the XML document to another XML format, i.e., it is an XML-to-X . . . Read full entry » How to use xsl:key to make my XSLT program super-effiPosted 3/12/2025 11:50:44 AMHi Folks, I have a huge (1.2GB) XML document containing air navigation data. I need to convert the XML document to another XML format, i.e., it is an XML-to-XML translation task. Deep within the source XML document is an <ARPT> element that contains <row> elements, one for each airpor . . . Read full entry » Re: Rearrange order of processed nodesPosted 3/12/2025 7:37:58 AMHi Sid and others, Thanks a lot for the feedback. On purpose we chose node() except b& because we wanted to keep especially processing instructions. It is my understanding that all node() other than the do-me-first-elements (great name!) are processed in document order. And yes, simplicity is . . . Read full entry » Re: Is there a way in XSLT/XPath to find the portion oPosted 3/11/2025 10:27:39 PMOn Tue, 2025-03-11 at 22:12 +0000, Roger L Costello costello@xxxxxxxxx wrote: > Liam gave this wicked cool way to return the portion of a string that > matches a regex pattern: > > replace($input, '^.*(\d+).*$', '$1') > > However, I did some testing, and it's not returning the des . . . Read full entry » Re: Is there a way in XSLT/XPath to find the portion oPosted 3/11/2025 10:25:49 PMOn 11/03/2025 23:12, Roger L Costello costello@xxxxxxxxx wrote: Liam gave this wicked cool way to return the portion of a string that matches a regex pattern: replace($input, '^.*(\d+).*$', '$1') However, I did some testing, and it's not returning the desired results: <xsl:variable name= . . . Read full entry » Re: Is there a way in XSLT/XPath to find the portion oPosted 3/11/2025 10:12:04 PMLiam gave this wicked cool way to return the portion of a string that matches a regex pattern: replace($input, '^.*(\d+).*$', '$1') However, I did some testing, and it's not returning the desired results: <xsl:variable name="TEXT" select="'The person put 12 dollars into the jar . . . Read full entry » Re: Rearrange order of processed nodesPosted 3/11/2025 5:29:11 PMI think the only defence of my proposal is the DRY principle: don't repeat yourself. It's intrinsically a good idea if the list of "special" element names is in one place only. That's not to say I would do it this way in practice -- especially when only one element name is "special& . . . Read full entry » Re: Rearrange order of processed nodesPosted 3/11/2025 4:23:18 PMI am wondering if anyone else thinks simplicity has its up side: <xsl:apply-templates select="elem1|elem2|elem3|elem4|elem5|elem6"/> <xsl:apply-templates select="node() except (elem1|elem2|elem3|elem4|elem5|elem6)"/> Or, if you have lots of elements in the 1st . . . Read full entry » Re: Rearrange order of processed nodesPosted 3/11/2025 1:07:11 PMOn 11.03.2025 13:39, Michael Mueller-Hillebrand michael.mueller-hillebrand@xxxxxxxxx wrote: Yes, I could collect the special elements in a variable and use this. <xsl:variable name="specialElems" select="(elem1|elem2|elem3|elem4|elem5|elem6)" as="element()+"/> . . . Read full entry » Re: Rearrange order of processed nodesPosted 3/11/2025 1:06:04 PMYou could have a function with a boolean result to test if an element is special or ordinary: <xsl:function name="f:is-ordinary" as="xs:boolean"> <xsl:param name="element" as="element()"/> <xsl:sequence select="not(self::(elem1 | el . . . Read full entry » Rearrange order of processed nodesPosted 3/11/2025 12:39:44 PMHello, dear colleagues, We have a task to process certain child elements before all other child nodes are processed. The obvious, simple solution would be something like: <xsl:apply-templates select="elem1, node() except elem1"/> But in our case, we have six named elements that s . . . Read full entry » Re: Is there a way in XSLT/XPath to find the portion oPosted 3/10/2025 11:25:33 PMOn Mon, 2025-03-10 at 22:08 +0000, Martin Honnen martin.honnen@xxxxxx wrote: > > On 10/03/2025 23:04, Martin Honnen martin.honnen@xxxxxxx wrote: > > > B B analyze-string("The person put 12 dollars into the jar", > "[0-9]+")//*:match > > returns an elemen . . . Read full entry » Re: Is there a way in XSLT/XPath to find the portion oPosted 3/10/2025 10:08:06 PMOn 10/03/2025 23:04, Martin Honnen martin.honnen@xxxxxx wrote: On 10/03/2025 23:01, Roger L Costello costello@xxxxxxxxx wrote: Hi Folks, The following XPath determines if the string in $TEXT contains a vowel: matches($TEXT, 'A|E|I|O|U') If there is a match-the string in $TEXT contains a vowel-th . . . Read full entry » Re: Is there a way in XSLT/XPath to find the portion oPosted 3/10/2025 10:04:02 PMOn 10/03/2025 23:01, Roger L Costello costello@xxxxxxxxx wrote: Hi Folks, The following XPath determines if the string in $TEXT contains a vowel: matches($TEXT, 'A|E|I|O|U') If there is a match-the string in $TEXT contains a vowel-then which vowel was matched? A? E? I? O? or U? It may be desirab . . . Read full entry » Is there a way in XSLT/XPath to find the portion of aPosted 3/10/2025 10:01:34 PMHi Folks, The following XPath determines if the string in $TEXT contains a vowel: matches($TEXT, 'A|E|I|O|U') If there is a match-the string in $TEXT contains a vowel-then which vowel was matched? A? E? I? O? or U? It may be desirable to know that. Another example: an XSLT program wants to know . . . Read full entry » What VAST areas of knowledge must be integrated to crePosted 3/10/2025 4:33:09 PMHi Folks, Last week there was a discussion on using XSLT to display the set of Unicode characters denoted by a regular expression. Unicode? Regular expressions? Those are two VAST areas of knowledge. An XSLT processor implementor must have a mastery of them and must know how to incorporate Unic . . . Read full entry » Imagine that the semantics of concatenating two regexPosted 3/9/2025 10:21:17 AMHi Folks, Here is XPath that determines if the value of variable TEXT matches the pattern 'A' (that is, does 'A' occur anywhere within the value of TEXT): matches($TEXT, 'A') The result of evaluating the expression is true or false. String Oriented Symbolic Language (SNOBOL) is best known for i . . . Read full entry » Re: Saxon vulnerabilityPosted 3/8/2025 8:17:52 PMOn Sat, 2025-03-08 at 15:23 +0000, Roger L Costello costello@xxxxxxxxx > > Workaround: prevent parse-xml() from doing any DTD/DOCTYPE access; > disable DTD/DOCTYPE (https://saxonica.plan.io/issues/6711#note-12) It is important to understand that the vulnerability only applies when using S . . . Read full entry » Re: Saxon vulnerabilityPosted 3/8/2025 3:43:28 PMOn 08/03/2025 16:23, Roger L Costello costello@xxxxxxxxx wrote: Sorry Martin, but may I ask of you one more time to review this for accuracy: SAXON has a configuration property allowedProtocols that can be set to "https,http" to allow only HTTPS and HTTP URIs to be resolved, while file . . . Read full entry » Re: Saxon vulnerabilityPosted 3/8/2025 3:23:13 PM> the original posting you had did use parse-xml with an external entity, > I am not sure why you now bring up unparsed-text Eek, that was a typo. I meant parse-xml. Sorry Martin, but may I ask of you one more time to review this for accuracy: SAXON has a configuration property allowedPro . . . Read full entry » Re: Saxon vulnerabilityPosted 3/8/2025 3:00:50 PMOn 08/03/2025 15:50, Roger L Costello costello@xxxxxxxxx wrote: > Thank you again, Martin. I want to be certain that I have this correct, so I can give my colleagues accurate information. > > > > Is this accurate: > > > > SAXON has a configuration property allowedProtocol . . . Read full entry » Re: Saxon vulnerabilityPosted 3/8/2025 2:50:09 PMThank you again, Martin. I want to be certain that I have this correct, so I can give my colleagues accurate information. Is this accurate: SAXON has a configuration property allowedProtocols that can be set to "https,http" to allow only HTTPS and HTTP URIs to be resolved, while file UR . . . Read full entry » Re: Saxon vulnerabilityPosted 3/8/2025 2:19:09 PMOn 08/03/2025 14:51, Roger L Costello costello@xxxxxxxxx wrote: > Thank you, Martin. > > > > Is this accurate: > > > > SAXON has a configuration property allowedProtocols that can be set to "https,http" to allow only HTTPS and HTTP URIs to be resolved, while fil . . . Read full entry » Re: Saxon vulnerabilityPosted 3/8/2025 1:50:39 PMThank you, Martin. Is this accurate: SAXON has a configuration property allowedProtocols that can be set to "https,http" to allow only HTTPS and HTTP URIs to be resolved, while file URI access should fail. However, currently, when doing this: unparsed-text('file:///Windows/win.ini') . . . Read full entry » Re: Saxon vulnerabilityPosted 3/8/2025 1:30:01 PMOn 08/03/2025 13:55, Roger L Costello costello@xxxxxxxxx wrote: Hi Folks, Below is my writeup of the vulnerability. Please let me know of any inaccuracies. /Roger I think that an XML document can have entities declared that access the file system is a known feature, not necessarily a security . . . Read full entry » Re: Saxon vulnerabilityPosted 3/8/2025 12:55:28 PMHi Folks, Below is my writeup of the vulnerability. Please let me know of any inaccuracies. /Roger Below is an XSLT program that reads the Windows/win.ini file. A bad actor could use the program to read and display the contents of any file on your machine. This is a vulnerability. The SAXON team . . . Read full entry » Re: Saxon vulnerabilityPosted 3/7/2025 9:57:17 PM> Is a call to parse-xml being done "behind the scene" by any popular applications that might be using Saxon internally, such as Oxygen and or some XSLT/XPath extensions to VS.Code? > > If so, we should probably also be cautious to use these, before this vulnerability has been fi . . . Read full entry » Re: Saxon vulnerabilityPosted 3/7/2025 9:08:19 PMIs a call to parse-xml being done "behind the scene" by any popular applications that might be using Saxon internally, such as Oxygen and or some XSLT/XPath extensions to VS.Code? If so, we should probably also be cautious to use these, before this vulnerability has been fixed and they c . . . Read full entry » Saxon vulnerabilityPosted 3/7/2025 8:09:18 PMIf you are using Saxon to run untrusted XSLT or XQuery code, please note the security vulnerability in parse-xml() identified by @Martin Honnen at https://saxonica.plan.io/issues/6711, and apply the workaround noted in comment #12. The effect of the vulnerability is to allow an attacker to execut . . . Read full entry » Re: Over the years, have you created an XSLT library?Posted 3/6/2025 4:31:37 PM+1 --dal > On Mar 6, 2025, at 2:16b/AM, Alan Painter alan.painter@xxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > Pardon me if I missed it being mentioned already, but I haven't seen any mention of functx, Priscilla Walmsley's venerable library of xpath functions. I . . . Read full entry » Re: Re: Over the years, have you created an XSLT libraPosted 3/6/2025 2:00:57 PMAlan, thanks for mentioning FunctX. Its example shows that a good library is useful not only as a toolbox, but also a reference work. (A 'library'?) Didn't someone also mention Joel K's excellent library? There is also Transpect (Gerrit and co), Erik Siegel's xtpxlib (XProc with lots of XSLT) and . . . Read full entry » Re: Re: Over the years, have you created an XSLT libraPosted 3/6/2025 7:16:21 AMPardon me if I missed it being mentioned already, but I haven't seen any mention of functx, Priscilla Walmsley's venerable library of xpath functions. I regularly refer to it for inspiration. I've even made a monetary contribution to its maintenance. https://www.datypic.com/xsl/ Functx is the po . . . Read full entry » Re: Re: Over the years, have you created an XSLT libraPosted 3/5/2025 11:45:40 PMOn 06/03/2025 00:31, Lizzi, Vincent vincent.lizzi@xxxxxxxxxxxxxxxxxxxx wrote: Seeing as XSLT 4.0 is in development now, is it possible to consider adding an option to xsl:next-match that could enable passing along all parameters? This option might take the form of a new optional attribute on xsl:ne . . . Read full entry » Re: Over the years, have you created an XSLT library?Posted 3/5/2025 11:31:40 PMHi folks, An XSLT "library" can be useful when working with standardized (or substantially similar) formats across different projects. For example, I have written a set of XSLTs for transformations between different versions of JATS which is named jats_from_jats. When I need to produce . . . Read full entry » Re: Re: Over the years, have you created an XSLT libraPosted 3/5/2025 5:08:08 PMOn Wed, 2025-03-05 at 10:47 +0000, Roger L Costello costello@xxxxxxxxx wrote: > > Would you give an example of an XPath function that solves a common > task and you would put in a library? Like some others here, i donbt have a library, but code that ibve written for clients can often be . . . Read full entry » Re: Over the years, have you created an XSLT library?Posted 3/5/2025 5:01:49 PM>> Would you give an example of an XPath function that solves a common task and you would put in a library? >> When I saw your question I found it hard to think of any functions or templates I have reused across multiple projects in unrelated fields, though of course I have often reus . . . Read full entry » Re: Re: Over the years, have you created an XSLT libraPosted 3/5/2025 4:41:24 PM(Most likely) Dimitre has more 'library' entries than any of us Roger. regards On Wed, 5 Mar 2025 at 16:37, Dimitre Novatchev dnovatchev@xxxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > Would you give an example of an XPath function that solves a common task > and y . . . Read full entry » Re: Re: Over the years, have you created an XSLT libraPosted 3/5/2025 4:37:02 PM> Would you give an example of an XPath function that solves a common task and you would put in a library? All of the FXSL functions are such examples. As for new functions, my recent Medium articles may give us an idea: - "Generators in Xpath", https://medium.com/@dimitrenov . . . Read full entry » Re: Re: Over the years, have you created an XSLT libraPosted 3/5/2025 10:46:46 AMDimitre wrote: > If I were lucky enough to have my daily work in an XPath-based > programming environment, I would definitely develop libraries > of functions that are useful for solving common tasks Would you give an example of an XPath function that solves a common task and you would p . . . Read full entry » Re: Re: Over the years, have you created an XSLT libraPosted 3/4/2025 11:05:36 PMOn 04/03/2025 23:00, Roger L Costello costello@xxxxxxxxx wrote: > Hi Folks, > > The lack of response leads me to conclude that developers do not create their own XSLT libraries. I just think that those (other than Dimitre) that have created libraries haven't found the time to respond. The . . . Read full entry » Re: Re: Over the years, have you created an XSLT libraPosted 3/4/2025 10:31:29 PMHi Roger, I just saw your first post on this topic and replied to it. > The lack of response leads me to conclude that developers do not create their own XSLT libraries. I think that if there are a few standard and well-thought libraries of XPath functions that everybody can use, this signif . . . Read full entry » Re: Over the years, have you created an XSLT library?Posted 3/4/2025 10:15:04 PMOn Tue, Mar 4, 2025 at 3:17b/AM Roger L Costello costello@xxxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > Hi Folks, > > Over the years, as you've written many XSLT programs, have you created a > library of user-defined functions? https://fxsl.sourceforge.net/ Fo . . . Read full entry » Re: Re: Over the years, have you created an XSLT libraPosted 3/4/2025 10:10:55 PMI program with XSLT and ExtendScript (Adobe's version of JavaScript). My "library" simply consists of code that I have written for clients. When I am looking for something for reuse, I use a program called Agent Ransack (free) or FileLocator Pro to search my folder structure for code that . . . Read full entry » Re: Over the years, have you created an XSLT library?Posted 3/4/2025 10:00:08 PMHi Folks, The lack of response leads me to conclude that developers do not create their own XSLT libraries. In other programming languages it is common to create a continually expanding grab-bag of functions, utilities, and small programs that may be used over and over from project to project. Wha . . . Read full entry » Over the years, have you created an XSLT library?Posted 3/4/2025 11:17:20 AMHi Folks, Over the years, as you've written many XSLT programs, have you created a library of user-defined functions? If yes, then I have two questions for you: 1. What functions in your library do you find yourself using most often? 2. As your library gets richer and richer, do you find that i . . . Read full entry » Re: Imagine that the semantics of comparison operationPosted 3/2/2025 9:29:30 PMOn Sun, 2025-03-02 at 15:24 +0000, Roger L Costello costello@xxxxxxxxx wrote: > > <xsl:variable name="isDifferent" select="$FIRST ne $SECOND" > as="xs:boolean"/> > <xsl:variable name="APPEND" as="xs:string?"> > B B B < . . . Read full entry » Re: Imagine that the semantics of comparison operationPosted 3/2/2025 5:07:29 PM> <xsl:variable name="isDifferent" select="$FIRST ne $SECOND" as="xs:boolean"/> > <xsl:variable name="APPEND" as="xs:string?"> > <xsl:if test="$isDifferent eq true()"> > <xsl:sequence sele . . . Read full entry » Re: Imagine that the semantics of comparison operationPosted 3/2/2025 3:36:06 PM> I would express that as > > <xsl:variable name="APPEND" as="xs:string?" select="($FIRST || > $SECOND)[$isDifferent]"/> . . . Read full entry » Re: Imagine that the semantics of comparison operationPosted 3/2/2025 3:30:54 PMOn 02/03/2025 16:24, Roger L Costello costello@xxxxxxxxx wrote: To achieve the same functionality with XSLT and XPath, we would do this: <xsl:variable name="isDifferent" select="$FIRST ne $SECOND" as="xs:boolean"/> <xsl:variable name="APPEND" as=&qu . . . Read full entry » Imagine that the semantics of comparison operations waPosted 3/2/2025 3:24:41 PMHi Folks, Here is XPath that compares two string variables to determine if they differ: $FIRST ne $SECOND The result of evaluating the expression is true or false. The programming language called String Oriented Symbolic Language (SNOBOL) can also compare two string variables to determine if th . . . Read full entry » 10 reasons why I love codingPosted 3/2/2025 11:23:14 AMHi Folks, I love coding because: 1. Writing a program gives me a goal, something to achieve. I like goals and once a goal is achieved, it is very satisfying. 2. Writing code compels me to focus and discipline my mind. Whenever I am undisciplined and have a mental lapse, it leads to mistakes. I l . . . Read full entry » Re: How to never make mistakes when coding?Posted 3/2/2025 7:55:27 AMThere is a foolproof way to avoid errors in code. Write no code. The frogs have a dictum, roughly: "Only people who do nothing make no mistakes." I personally adhere to the notion that keeping code clean and understandable makes it easier to avoid errors. Keep technical debt to a minim . . . Read full entry » Re: How to never make mistakes when coding?Posted 3/2/2025 5:44:05 AMI assume that when I write code, I will make mistakes and lots of them. I define mistakes as any discrepancy between what I mean versus what I say. When you write code you always say what you say. That's inevitable. But we don't always say what we mean. And it's critically important we find wa . . . Read full entry » Re: How to never make mistakes when coding?Posted 3/1/2025 8:46:44 PMThank you, Michael for pointing me to your blog articles. I finished reading the first one, "Bugs: How Well Are We Doing?" (https://blog.saxonica.com/mike/2017/02/bugs-how-well-are-we-doing.html) and I enjoyed it very much. Terrific writing style. Great information. I will recommend it to . . . Read full entry » Re: How to never make mistakes when coding?Posted 3/1/2025 8:38:41 PMOn Sat, 2025-03-01 at 14:49 +0000, Roger L Costello costello@xxxxxxxxx wrote: > > <xsl:for-each select="/root/record[position() gt 2"> > > See the mistake? > > I should have written position() ge 2 or position() gt 1 What i noticed first was a missing ] at the end . . . Read full entry » Re: How to never make mistakes when coding?Posted 3/1/2025 8:15:14 PMAt 01/03/2025 19:44 +0000, Michael Kay michaelkay90@xxxxxxxxx wrote: At 01/03/2025 14:50 +0000, Roger L Costello costello@xxxxxxxxx wrote: Have you thought about these types of questions? What answers did you come up with? XSLT 2.0 introduced stronger type-checking as a response to this requireme . . . Read full entry » Re: How to never make mistakes when coding?Posted 3/1/2025 7:43:37 PM> Have you thought about these types of questions? What answers did you come up with? > There is of course a vast literature on software engineering that attempts to answer your questions, but you may be interested in reading some of my thoughts on the subject: https://blog.saxonica.com/mi . . . Read full entry » Re: How to never make mistakes when coding?Posted 3/1/2025 7:11:53 PMHi Roger, I like mechanisms that let me efficiently capture and validate my assumptions while coding bin the momentb, such as type annotations and assertions. These capture more coding errors than I would like to admit. * Chris From: Dimitre Novatchev dnovatchev@xxxxxxxxx <xsl-list-se . . . Read full entry » Re: How to never make mistakes when coding?Posted 3/1/2025 6:44:31 PM> How to avoid making mistakes? Is it even possible? It depends on the definition of "mistake" ... If "mistake" means any case where one's expectations contradict reality, then again we have the same problem, because now we need to define "reality"... And probabl . . . Read full entry » XSL-List GuidelinesPosted 3/1/2025 5:20:30 PMThis information is posted to the XSL-List (and the XSL-List Digest) at intervals under the subject line "XSL-List guidelines". INTRODUCTION TO XSL-LIST XSL-List hosts discussion of XSL itself, XSL applications and implementation, and XSL user questions. XSL-List is open to everyone, us . . . Read full entry » Re: How to never make mistakes when coding?Posted 3/1/2025 5:20:25 PMThank you Jean-Luc, I appreciate very much you pointing me to Knuthbs paper. I am reading it now. The Introduction is awesome: I make mistakes. I always have, and I probably always will. But I like to think that I learn something every time I go astray. In fact, one of my favorite poems consists . . . Read full entry » Re: How to never make mistakes when coding?Posted 3/1/2025 5:01:51 PMHello Roger, have you read Chapter 34 of D.E.Knuth's /Digital Typography/ (1999)? The title is "The Final Errors of TeX" (chapter written in August 1998) It refers to an earlier article on "The errors of TeX", written in 1988, and reprinted as Chapter 10 of /Literate Program . . . Read full entry » How to never make mistakes when coding?Posted 3/1/2025 2:49:37 PMHi Folks, A few days ago I found a mistake in my code. The input data to my code contained a sequence of records and my code should iterate over all the records after the first record. I wrote this: <xsl:for-each select="/root/record[position() gt 2"> See the mistake? I should h . . . Read full entry » Re: How to output the characters denoted by the regexPosted 2/28/2025 2:46:44 PMFirst reply got blocked for being too long.. Unicode 16 appears to have 850 characters with category P... <xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xsl:output method=" . . . Read full entry » Re: How to output the characters denoted by the regexPosted 2/28/2025 2:22:21 PM>> Number of punctuation symbols = 632 >> That's over 100. ChatGPT was right. Michael Kay . . . Read full entry » Re: How to output the characters denoted by the regexPosted 2/28/2025 1:39:44 PMOn 28/02/2025 14:00, Roger L Costello costello@xxxxxxxxx wrote: > Using Martin's brute force XSLT program: > > > > Number of punctuation symbols = 632 > Example fiddle <https://martin-honnen.github.io/cheerpj3-saxonhe12-fiddle/?code=%3C%3Fxml+ve rsion%3D%221.0%22+encoding%3D%22 . . . Read full entry » Re: How to output the characters denoted by the regexPosted 2/28/2025 1:17:14 PMOn 28/02/2025 14:00, Roger L Costello costello@xxxxxxxxx wrote: Using Martin's brute force XSLT program: Number of punctuation symbols = 632 As noted in the other answers, what a punctuation character is or rather what all is considered a punctuation character depends on the Unicode version so . . . Read full entry » Re: How to output the characters denoted by the regexPosted 2/28/2025 1:07:06 PMHere's the beginning of the list of characters denoted by \p{P}, courtesy of Martin's XSLT program: Dec Chr 33 ! 34 " 35 # 37 % 38 & 39 ' 40 ( 41 ) 42 * 44 , 45 - 46 . 47 / 58 : 59 ; 63 ? 64 @ 91 [ 92 \ 93 ] 95 _ 123 { 125 } 161 B! 167 B' 171 B+ 182 B6 . . . Read full entry » Re: How to output the characters denoted by the regexPosted 2/28/2025 1:00:02 PMUsing Martin's brute force XSLT program: Number of punctuation symbols = 632 . . . Read full entry » Re: How to output the characters denoted by the regexPosted 2/28/2025 12:53:43 PMChatGPT: > Please list all the characters denoted by the regular expression \p{P} The regular expression \p{P} is a Unicode property that matches any punctuation character. This includes a wide range of symbols used in writing to separate sentences and words, indicate pauses, or convey other s . . . Read full entry » Re: How to output the characters denoted by the regexPosted 2/28/2025 12:39:57 PMA colleague of mine recently told me that he asked AI (Copilot) to generate a number of examples that would match a given regular expression. Maybe that helps. Pieter On 2/28/25 13:09, Martin Honnen martin.honnen@xxxxxx wrote: On 28/02/2025 12:50, Roger L Costello costello@xxxxxxxxx wrote: Hi F . . . Read full entry » Re: How to output the characters denoted by the regexPosted 2/28/2025 12:08:46 PMOn 28/02/2025 12:50, Roger L Costello costello@xxxxxxxxx wrote: Hi Folks, In XML Schema \p{P} denotes the set of punctuation characters. Is there a way in XSLT to output (display) the characters denoted by \p{P} With "brute force", like this, perhaps? B <xsl:template match="/ . . . Read full entry » Re: How to output the characters denoted by the regexPosted 2/28/2025 12:05:13 PMNo. Although XSD defines the semantics of a regular expression as denoting a set of strings, there is no way to enumerate that set, the only functionality is to determine whether a given string is a member of that set. Indeed, for some regular expressions the set of strings they denote is infinite. . . . Read full entry » How to output the characters denoted by the regex \p{PPosted 2/28/2025 11:50:12 AMHi Folks, In XML Schema \p{P} denotes the set of punctuation characters. Is there a way in XSLT to output (display) the characters denoted by \p{P} /Roger . . . Read full entry » Re: Grouping with siblingsPosted 2/22/2025 6:03:27 PMI wanted to try solving this problem and then using Oxygen's new AI to help with documentation. It seems to explain the templates reasonably well. I added one comment to explain the key logic I used which is the first comment. The following XSL creates the required output. <?xml version="1 . . . Read full entry » Re: xsl:for-each is not a loop <-- right?Posted 2/20/2025 11:04:37 PMOn Thu, 20 Feb 2025 at 22:12, Roger L Costello costello@xxxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > Hi Folks, > > Suppose that I create a parameterized boolean function which tests its > parameter to see if it is greater than zero: > > <xsl:function nam . . . Read full entry » Re: xsl:for-each is not a loop <-- right?Posted 2/20/2025 10:29:26 PMOn 20/02/2025 23:12, Roger L Costello costello@xxxxxxxxx wrote: shorthand for applying an expression to each item in a list If you used "sequence" instead of "list" and wanted a short description for the XPath 3.1 map operator "!" I could easily agree with that. But . . . Read full entry » Re: xsl:for-each is not a loop <-- right?Posted 2/20/2025 10:20:51 PMOn 20/02/2025 23:12, Roger L Costello costello@xxxxxxxxx wrote: > Hi Folks, > > Suppose that I create a parameterized boolean function which tests its parameter to see if it is greater than zero: > > <xsl:function name="f:GT_Zero" as="xs:boolean"> > . . . Read full entry » xsl:for-each is not a loop <-- right?Posted 2/20/2025 10:12:14 PMHi Folks, Suppose that I create a parameterized boolean function which tests its parameter to see if it is greater than zero: <xsl:function name="f:GT_Zero" as="xs:boolean"> <xsl:param name="value"/> <xsl:sequence select="$value gt 0" . . . Read full entry » [ANN] Calling Users of XML, XSLT, XPath, XForms, or iXPosted 2/18/2025 4:53:01 PMDo you use XML, XSLT, XPath, XForms, or iXML to help you do your real work? Is the XML stack a source of tools that support your research or daily job? Do you speak at topic-related conferences about your area of expertise but not about the markup tools you use to do that work? Balisage is the pla . . . Read full entry » Re: Grouping with siblingsPosted 2/16/2025 4:06:40 AMOn Sun, 2025-02-16 at 00:12 +0000, Martin Honnen martin.honnen@xxxxxx wrote: > > > > > On 16/02/2025 01:00, Liam R. E. Quin liam@xxxxxxxxxxxxxxxx wrote: > > > > > On Sat, 2025-02-15 at 20:49 +0000, rick@xxxxxxxxxxxxxx wrote: > > > > > > > > Than . . . Read full entry » Re: Grouping with siblingsPosted 2/16/2025 12:12:43 AMOn 16/02/2025 01:00, Liam R. E. Quin liam@xxxxxxxxxxxxxxxx wrote: > On Sat, 2025-02-15 at 20:49 +0000,rick@xxxxxxxxxxxxxx wrote: >> Thank you very much Martin. That got me going in the right direction. > A quick note - in some cases group-by won't work well. An example can It was grou . . . Read full entry »
|
PURCHASE STYLUS STUDIO ONLINE TODAY!!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Learn Stylus Studio in 6 MinutesCan six minutes change your life? A new action-packed online video demonstration covers how to use Stylus Studio in just six minutes! Watch this video and change the way you develop XML applications forever! Ask Someone You KnowDoes your company use Stylus Studio? Do your competitors? Engineers from over 100,000 leading companies use Stylus Studio, and now you can ask someone from your own organization about their experiences using Stylus Studio. |