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

RE: xml to xml transform

Subject: RE: xml to xml transform
From: Shimon Pozin <spozin@xxxxxxxxxxxxx>
Date: Tue, 16 Jan 2001 13:46:22 -0500
shimon pozin
Thanks, Mike, for the clue. However, when I tested
this solution, I paid attention that if the source
xml is slightly different:
<rows>
  <row fld="f1" value="v1"/>
  <row fld="f1" value="v2"/>
  <row fld="f2" value="v3"/>
  <row fld="f1" value="v2"/>
  <row fld="f3" value="v4"/>
</rows>

then this solution will not work since f1 comes after f2
and in this case I'll see two elements f1 rather than one.
Should I sort the entire collection before I use this
solution? Can I use sorting capabilities of apply-templates
for that?

Thanks again!

Shimon

> -----Original Message-----
> From: Mike Brown [mailto:mike@xxxxxxxx]
> Sent: Monday, January 15, 2001 10:54 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Cc: spozin@xxxxxxxxxxxxx
> Subject: Re:  xml to xml transform
> 
> 
> Shimon Pozin wrote:
> > How can I transform document:
> > <row @fld="f1" value="v1">
> > <row @fld="f1" value="v2">
> > <row @fld="f2" value="v3">
> > <row @fld="f3" value="v4">
> 
> This isn't even XML.
> I will answer your question based on the assumption that you meant:
> 
> <rows>
> <row fld="f1" value="v1"/>
> <row fld="f1" value="v2"/>
> <row fld="f2" value="v3"/>
> <row fld="f3" value="v4"/>
> </rows>
> 
> > to
> > 
> > <f1>
> > <v1/>
> > <v2/>
> > </f1>
> > <f2>
> > <v3/>
> > </f2>
> > <f3>
> > <v4/>
> > </f3>
> > 
> > if I don't know values f1, f2, etc. in advance?
> 
> This is a fun (fun in a pathetically geeky way) variation on 
> the grouping
> FAQ. There is a design pattern for this. In your case it is along the
> lines of the following:
> 
>   1. id a node-set representing the unique values from all the @fld
>        attributes (one f1, one f2, one f3...). create an element with
>        a name that is the same as the value. in the content of that
>        element...
>   2. iterate through that set, finding the rest of the @fld 
> values that
>        have the current value (all f1s, all f2s, all f3s...). 
> There's your
>        group. All you have to do is...
>   3. Iterate through those (or in this case, through the corresponding
>        @value attributes) and create elements named for their values.
> 
> <?xml version="1.0" encoding="utf-8"?>
> <xsl:stylesheet 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
> 
>         <xsl:output method="xml" indent="yes"/>
> 
>         <xsl:template match="rows">
>            <xsl:for-each select="row[not(@fld = 
> preceding-sibling::row/@fld)]"> 
>               <xsl:element name="{@fld}">
>                  <xsl:for-each select="../row[@fld = current()/@fld]">
>                     <xsl:element name="{@value}"/>
>                  </xsl:for-each>
>               </xsl:element>
>            </xsl:for-each>
>         </xsl:template>
> 
> </xsl:stylesheet>
> 
>    - Mike
> ____________________________________________________________________
> Mike J. Brown, software engineer at            My XML/XSL resources: 
> webb.net in Denver, Colorado, USA              http://skew.org/xml/
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


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.