Subject: Re: [xsl] How to do macro substitution in XPath? From: "Piez, Wendell A. (Fed) wendell.piez@xxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Mon, 4 Dec 2023 14:42:17 -0000 |
Hi, In my view both of Mike's suggestions below are better than an XPath optimized for something other than readability: ('action 1'[/Book/Title eq 'Path to Power' and /Book/Author eq 'Robert A. Caro'], 'action 2'[/Book/Title eq 'Power Broker' and /Book/Author eq 'Robert A. Caro'], 'Error')[1] Then too, Liam asks better questions altogether. Cheers, Wendell -----Original Message----- From: Michael Kay mike@xxxxxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Sent: Saturday, December 2, 2023 1:13 PM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: [xsl] How to do macro substitution in XPath? > > Here is the wanted "pure XPath" that preserves the "readability": > > let $LBJ := /Book/Title eq 'Path to Power' and /Book/Author eq 'Robert A. Caro', > $RM := /Book/Title eq 'Power Broker' and /Book/Author eq 'Robert A. Caro' > return > if($LBJ) then 'action 1' > else if($RM) then 'action 2' > else 'Error' > The disadvantage here is that the code doesn't have a high level of reusability. The code as written can only be used to test a book element that is the outermost element of the current document. I prefer to use functions: let $LBJ := function($book as element(Book)) as xs:boolean {$book/Title eq '....' and $book/Author eq '....') let $RM := function(....) return if ($LBJ(/Book)) then 'action 1' else if ($RM(/Book)) then 'action 2' ... But although an XPath expression was requested, the context appears to be XSLT, and in that case I would use good old template rules: <xsl:template match="Book[Title eq 'Path to Power' and Author eq 'Robert A. Caro']"> action-1 </xsl:template> <xsl:template match="Book[Title eq 'Power Broker' and Author eq 'Robert A. Caro']"> action-2 </xsl:template> Michael Kay Saxonica
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] How to do macro substitut, Dimitre Novatchev dn | Thread | Re: [xsl] How to do macro substitut, Piez, Wendell A. (Fe |
Re: [xsl] How to do macro substitut, Liam R. E. Quin liam | Date | Re: [xsl] How to do macro substitut, Piez, Wendell A. (Fe |
Month |