[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 ... andma

Subject: Re: How to store a sequence into an element ... andmaintainthe sequence inside the element?
From: "Dr. Roger L Costello costello@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Sun, 19 Jul 2020 22:20:56 -0000
Re:  How to store a sequence into an element ...  andma
Michael, upon further reflection I realized that what you are saying is to
replace this markup:

   <Document>
       <Greeting>My List</Greeting>
       <List><xsl:sequence select="$list" /></List>
       <Ending>The End</Ending>
   </Document>

with a map:

<xsl:variable name="Document" as="map(xs:string, item()*)">
    <xsl:map>
        <xsl:map-entry key="'Greeting'" select="('My List')"/>
        <xsl:map-entry key="'List'" select="(1,2,3)"/>
        <xsl:map-entry key="'Ending'" select="('The End')"/>
    </xsl:map>
</xsl:variable>

My application will process the map rather than markup. Neat!

Dimitre, I am trying to avoid the overhead of markup. In matrices I don't want
the overhead that markup incurs. Instead, I want plain old sequences. Liam
talked about this in a post last week.

/Roger

-----Original Message-----
From: Dr. Roger L Costello costello@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Sunday, July 19, 2020 5:26 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: [EXT] Re:  How to store a sequence into an element ...
andmaintainthe sequence inside the element?

Hello Michael,

Ah, so I think what you are saying is that I could store the sequence in a map
and then overwrite the sequence that is in the map. Something like this:

<xsl:variable name="list" as="map(xs:string, xs:integer*)">
    <xsl:map>
        <xsl:map-entry key="'li'" select="(1,2,3)"/>
    </xsl:map>
</xsl:variable>
... do some processing and then update the list ...
<xsl:variable name="list" select="map:put($list, 'li', (4,1,5))"/>
... do some more processing and then update the list ...
<xsl:variable name="list" select="map:put($list, 'li', (9,9,0))"/>
... do some more processing and then update the list ...

Right?

/Roger

From: Michael Kay mike@xxxxxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Sunday, July 19, 2020 4:58 PM
To: xsl-list <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Subject: [EXT] Re:  How to store a sequence into an element ... and
maintainthe sequence inside the element?

That's the point Liam was making last week - XML is very text-oriented. When
you add a list of numbers to a document it gets serialized as a string. As
Martin says, you can turn it back into a sequence of numbers by validating
against a list type defined in a schema. But that's very limiting, which is
why XSLT 3.0 introduced maps and arrays.

Michael Kay
Saxonica


On 19 Jul 2020, at 20:14, Dr. Roger L Costello mailto:costello@xxxxxxxxx
<mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> 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?

Here is my XSLT program:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:xs="http://www.w3.org/2001/XMLSchema"
   version="3.0">

   <xsl:template match="/">
       <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="document" as="element(Document)">
           <Document>
               <Greeting>My List</Greeting>
               <List><xsl:sequence select="$list" /></List>
               <Ending>The End</Ending>
           </Document>
       </xsl:variable>
       <xsl:message>count($document/List) = <xsl:value-of
select="count($document/List)"/></xsl:message>
   </xsl:template>
</xsl:stylesheet>

/Roger

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

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.