[Top] [All Lists]

Re: [xsl] Each value in an XPath array is a sequence of elements... how to access a particular element in a particular array value?

2019-06-06 10:22:14
Firstly, I missed this, to select the first member in an array you need 
$groups?1 rather than $groups[1].

Secondly, if $rows is a sequence of row elements then $rows/row selects nothing 
because a row doesn't have a child::row.

Thirdly, I'm not sure why you expect the 'Foo' row to be in the first group. 
distinct-values() loses order.

Michael Kay

On 6 Jun 2019, at 16:15, Costello, Roger L. costello(_at_)mitre(_dot_)org 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

Hi Michael,

That XPath expression yields the empty set.

I created these variables:

<xsl:variable name="first-group" select="$groups[1]" />
<xsl:variable name="Foo-row-first-group" select="($first-group?*)/row[Data eq 

And then output the value of the second variable:

   <xsl:sequence select="$Foo-row-first-group" />

This is the output:


Why does the XPath yield the empty set? Clearly the first group contains a 
<row> element with a <Data> element with value 'Foo'. Thoughts? 


From: Michael Kay mike(_at_)saxonica(_dot_)com 
Sent: Thursday, June 6, 2019 10:47 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [EXT] Re: [xsl] Each value in an XPath array is a sequence of 
elements... how to access a particular element in a particular array value?

$first_group is an array of nodes. To turn it into a sequence of nodes, use 
"?*". So it's


(parentheses because I don't have the operator precedences in my head)

Michael Kay

On 6 Jun 2019, at 15:26, Costello, Roger L. 
<mailto:xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

Hi Folks,

This is an extension to a question that I had last week ...

Recall that I want to group the <row> elements in the following XML. Each 
group should consist of those <row> elements that have the same ARPT__IDENT, 
TRM__IDENT values.


That XML consists of two groups. Each group has two <row> elements.

Martin provided a great XPath 3.1 expression for doing the grouping:

<xsl:variable name="groups" as="array(element(row))*" select="
   let $keys := 
       distinct-values($rows/concat(ARPT__IDENT, '|', TRM__IDENT))
       for $i in $keys
           array {$rows[$i = concat(ARPT__IDENT, '|', TRM__IDENT)] }          

In the following, I select the first group:

<xsl:variable name="first-group" select="$groups[1]" />

Next, I want to select the <row> element in the first group that has Foo as 
the value of the <Data> element. I thought that this would be the appropriate 
XPath expression:

<xsl:variable name="Foo-row-first-group" select="$first-group/row[Data eq 

Apparently it is not the appropriate XPath expression, because I get this 
error message:

      Axis step child::element(Q{}row) cannot
      be used here: the context item is not a node

What is the appropriate XPath expression, please?


http://lists.mulberrytech.com/unsub/xsl-list/673357 () 

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>