[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: How to store a sequence into an element ... and m

Subject: Re: How to store a sequence into an element ... and maintain the sequence inside the element?
From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Sun, 19 Jul 2020 19:56:49 -0000
Re:  How to store a sequence into an element ... and  m
On 19.07.2020 21:14, Dr. Roger L Costello costello@xxxxxxxxx wrote:
Hi Folks,

I created a sequence (1, 2, 3) as follows:

<xsl:variable name="list" select="(1, 2, 3)" as="xs:integer*" />

I checked that $list contains 3 integers:

<xsl:message>count($list) = <xsl:value-of
select="count($list)"/></xsl:message>

Sure enough, the output shows that there are 3 items:


count($list) = 3

Next, I want to store that sequence of integers in an element, along with
other elements:

<xsl:variable name="document" as="element(Document)"> <Document> <Greeting>My List</Greeting> <List><xsl:sequence select="$list" /></List> <Ending>The End</Ending> </Document> </xsl:variable>

Does the <List> element contain a sequence of 3 integers:

<xsl:message>count($document/List) = <xsl:value-of
select="count($document/List)"/></xsl:message>

Yikes! No it doesn't:


count($document/List) = 1

How to do what I want to do? That is, how to store the sequence of integers
in an element, along with other elements, such that I can pull the sequence
out of the element and immediately operate on the sequence? If that can't be
done, then what's the right way to do what I want to do?

That expression will always return the number of "List" elements. If you
use a schema and give that element a list datatype then I think that
with schema-aware processing
  $document/List/data()
would give you a list and you could of course count that list with e.g.
  count($document/List/data())


So the simplest example would be


    <xsl:import-schema>
        <xs:schema>
            <xs:element name="List" type="int-list"/>
            <xs:simpleType name="int-list">
                <xs:list itemType="xs:integer"/>
            </xs:simpleType>
        </xs:schema>
    </xsl:import-schema>

    <xsl:template match="/" name="xsl:initial-template">
        <xsl:variable name="list" select="(1, 2, 3)" as="xs:integer*" />
        <xsl:message>count($list) = <xsl:value-of
select="count($list)"/></xsl:message>
        <xsl:variable name="list-element" as="schema-element(List)">
            <List xsl:validation="strict">
              <xsl:sequence select="$list"/>
            </List>
        </xsl:variable>
        <xsl:message>count($list-element) = <xsl:value-of
select="count($list-element)"/></xsl:message>
        <xsl:message>count($list-element/data()) = <xsl:value-of
select="count($list-element/data())"/></xsl:message>
        <xsl:message select="$list-element instance of
schema-element(List)"/>
    </xsl:template>

you would need to write a more complex schema for the more complex
sample you had I think, I am not sure whether you could use a schema
type for that element inside other untyped elements.

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.