xsl-list
[Top] [All Lists]

Re: [xsl] What does //distinct-values(...) mean?

2020-04-08 08:21:58
Martin didn't say that it operated on a sequence of strings.

He explained that the "//" operator expands to address a bunch of nodes, and then the distinct-values() function is evaluated from each of those nodes.

XPath is evaluated from left to right and the "//" is evaluated before the distinct-values() function is evaluated.

I hope this helps.

. . . . . . Ken

At 2020-04-08 13:13 +0000, Costello, Roger L. costello(_at_)mitre(_dot_)org 
wrote:

Hi Martin,



But, but, but, ...



I thought that // operates on nodes. The distinct-values function doesn't return nodes, does it? I thought it returns a sequence of strings. If so, then how can // operate on a sequence of strings?



/Roger



-----Original Message-----

From: Martin Honnen martin(_dot_)honnen(_at_)gmx(_dot_)de <xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com>

Sent: Wednesday, April 8, 2020 8:25 AM

To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com

Subject: [EXT] Re: [xsl] What does //distinct-values(...) mean?



Am 08.04.2020 um 14:19 schrieb Costello, Roger L. costello(_at_)mitre(_dot_)org:

> Hi Folks,



> I executed this XPath query in Oxygen:



> //distinct-values(//Row[matches(Advertiser, 'TS3', 'i')]/Subscribers)



> The two slashes at the beginning were an accident. At the bottom of the screen Oxygen shows the matches. All of a sudden it showed 111,000 matches, then a moment later 438,000 matches, and then finally 525,946 matches.



> "Yikes!" I thought, "What is going on? There is supposed to be around 17 matches. How can there be half a million matches?"



> Then I saw the two slashes at the start.



> "Hmm, what is the meaning of two slashes preceding the distinct-values function?" I thought.



> So, I ask you: what is the meaning of two slashes preceding the distinct-values function? Why does its evaluation result in so many matches?



// is short for /descendant-or-self::node()/ so

   //distinct-values(//Row[matches(Advertiser, 'TS3', 'i')]/Subscribers)

is

   /descendant-or-self::node()/distinct-values(//Row[matches(Advertiser,

'TS3', 'i')]/Subscribers)

meaning it returns

   distinct-values(//Row[matches(Advertiser, 'TS3', 'i')]/Subscribers)

as many times as the document has any nodes selectable by

/descendant-or-self::node().






--
Contact info, blog, articles, etc. http://www.CraneSoftwrights.com/s/ |
Check our site for free XML, XSLT, XSL-FO and UBL developer resources |
Streaming hands-on XSLT/XPath 2 training class @ US$45 (5 hours free) |
Essays (UBL, XML, etc.) http://www.linkedin.com/today/author/gkholman |
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>