Re: [xsl] Help describing the behavior of a Path Expression

Subject: Re: [xsl] Help describing the behavior of a Path Expression
From: "Bridger Dyson-Smith bdysonsmith@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 5 Jun 2019 16:19:58 -0000
Dr Kay -
Thanks for the explanation and the link - that's helpful and clarifying.

Best,
Bridger

On Tue, Jun 4, 2019 at 6:07 PM Michael Kay mike@xxxxxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> There are three templates here, that match overlapping sets of nodes. None
> has an explicit priority, so each takes a default priority based on the
> form of the match pattern. The rules are here:
>
> https://www.w3.org/TR/xslt-30/#default-priority
>
> The rules indicate that the priority for "node()" is -0.5 (rule 10); the
> priority for "item" is 0 (rule 6), and the priority for
> "item[discount[...]]" is +0.5 (rule 11). Each <item> element selected by an
> xsl:apply-templates instruction is processed using the highest-priority
> rule that it matches.
>
> In this example the default rules for priorities have the desired effect.
> This isn't always the case. In more complex cases, it's good practice to
> allocate explicit priorities using the "priority" attribute.
>
> Michael Kay
>
> On 4 Jun 2019, at 21:06, Bridger Dyson-Smith bdysonsmith@xxxxxxxxx <
> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> Hi all -
>
> apologies for the awkward title. I was helping a coworker with a problem,
> where we wanted to ignore certain elements that didn't meet certain
> requirements. We had a working template for the elements with requirements,
> but how to make the processor ignore the others? My suggestion was to write
> an empty template for the element (`item` below), with the paraphrased
> explanation: "the processor with ignore the general expression but match on
> the specific expression", but I'm clueless about the "why doesn't the
> processor ignore all of the `item` elements, then?". I have the sense that
> explanation might be approximately right, but it (and I) would benefit from
> an improved understanding of what's actually happening.
>
> Would someone be willing to share some better words to describe this? Is
> it as easy as saying that since $expression-a (`item[discount]`) has a
> predicate, it has a higher precedence than $expression-b (`item`) (or maybe
> more simply: operator precedence - I see a note in Dr. Kay's XSLT/XPath 2.0
> book about this)?
>
> Thanks in advance for your time and trouble.
> Best,
> Bridger
>
> Here's a contrived example of our source document:
> <!-- source -->
> <items>
>   <item color="red" size="m">
>     <price>15.00</price>
>   </item>
>   <item color="blue" size="m">
>     <price>15.00</price>
>     <discount percentage="20"/>
>   </item>
>   <item color="yellow" size="l">
>     <price>15.00</price>
>     <discount percentage="10"/>
>   </item>
> </items>
>
> And a stylesheet:
> <!-- xsl -->
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>   xmlns:xs="http://www.w3.org/2001/XMLSchema";
>   exclude-result-prefixes="xs"
>   version="2.0">
>   <xsl:output encoding="UTF-8" method="xml" indent="yes"/>
>   <xsl:strip-space elements="*"/>
>
>   <!-- identity transform -->
>   <xsl:template match="@*|node()">
>     <xsl:copy>
>       <xsl:apply-templates select="@*|node()"/>
>     </xsl:copy>
>   </xsl:template>
>
>   <xsl:template match="item[discount[@percentage ge '15']]">
>     <discount-item color="{@color}" size="{@size}" price="{price}"
> discount="{discount/@percentage}"/>
>   </xsl:template>
>
>   <xsl:template match="item"/>
> </xsl:stylesheet>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/293509> (by
> email)
>
>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/1230532> (by
> email <>)

Current Thread