Search code examples
xsltxpathxsdxslt-2.0xpath-2.0

How do I find the number of elements in a <xs:list> using XSLT?


I have an XML schema that contains the following type :

<xs:simpleType name="valuelist">
  <xs:list itemType="xs:double"/>
</xs:simpleType>

A sample XML fragment would be:

<values>1 2 3.2 5.6</values>

In an XSLT transform, how do I get the number of elements in the list?

How do I iterate over the elements?


Solution

  • I. XPath 2.0 (XSLT 2.0) solution:

    count(tokenize(., ' '))
    

    II. XPath 1.0 (XSLT 1.0) solution:

     string-length()
    -
     string-length(translate(normalize-space(), ' ', ''))
    + 1
    

    As for iteration over the items of this list:

    1. In XPath 2.0 / XSLT 2.0 just use the above XPath 2.0 expression as the value of a select attribute:

    --

     for $i in tokenize(., ' '),
         $n in number($i)
      return
        yourXPathExpression
    

    --

    2. In XSLT 1.0 you need to have some more code for splitting/tokenization. There are several good answers to this question (part of them mine) -- just search for something like "xslt split a string"