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

Re: combining 2 different XML files within the same XS

Subject: Re: combining 2 different XML files within the same XSLT
From: "Todd Binder" <todd_binder@xxxxxxxxxxx>
Date: Tue, 27 Aug 2002 23:17:44 -0400
xsl sort type
This is very close to what I need.  The only problem I am encountering is
that the $mergedset of nodes is not sorting (it is sorting within the
file1.xml set of nodes AND within the file2.xml set of nodes, but it is not
mixing the 2 together to allow me to come out with a true mixed sorted list
of nodes.

I would have thought that the below code you supplied would have sorted ALL
the nodes in $mergedset by date, not have done it separately

<xsl:apply-templates select="//date">
    <!-- since your criterion is your date, we'll go straight to them -->
      <xsl:sort type="number"/>
      <!-- let's sort em while we're at it -->
 </xsl:apply-templates>

why is this sort not encompassing both sets of nodes?  is there a way to
make it sort both set's of nodes?

Could the problem be because if I do a count($mergedset) I get back 2, which
could be telling me that they 2 files are not truely combined, but rather 2
separate nodes in the $mergedset tree?

or does this have to do with sending the second pass you mention?  I am
guessing that I was trying to get it all in one pass thru.  Would I need to
output the <app> xml and then send it back thru a separate XSL file, or can
I simply pass the newly created <app> xml into another xsl:template in the
same file?

- Todd

----- Original Message -----
From: "Wendell Piez" <wapiez@xxxxxxxxxxxxxxxx>
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Tuesday, August 27, 2002 2:48 PM
Subject: Re:  combining 2 different XML files within the same XSLT


> Todd,
>
> There are any number of approaches to do what you're describing: I'll just
> describe a simple quick-and-dirty "forced merge".
>
> You name the two files in a separate config or "driver" file:
>
> <files>
>    <file>file1.xml</file>
>    <file>file2.xml</file>
> </files>
>
> This will be the source file for your transformation, in which you do
> something like:
>
> <xsl:variable name="mergedset" select="document(/files/file)"/>
>
> <xsl:template match="/">
>    <!-- matching on the root node of your config file -->
>    <apps>
>      <xsl:apply-templates select="$mergedset" mode="process"/>
>      <!-- this mode just bumps you off the default so you can match the
roots
>           of your merging documents separately -->
>      <!-- you need to wrap them in your <apps> here since there'll be more
than
>           one root and you don't want more than one <apps> -->
>    </apps>
> </xsl:template>
>
> <xsl:template match="/" mode="process">
>    <!-- this template will now match your merging documents' roots -->
>    <xsl:apply-templates select="//date">
>    <!-- since your criterion is your date, we'll go straight to them -->
>      <xsl:sort type="number"/>
>      <!-- let's sort em while we're at it -->
>    </xsl:apply-templates>
> </xsl:template>
>
> <xsl:template match="date">
>    <xsl:if test="
>     ...do your test against your criterion of what to include;
>                  it could of course be parameterized
>     ">
> ...
>     this is where the action will happen: you'll probably go up a step
>     (for-each select=".."), but there's lots of ways to skin this cat:
>     the point is you'll build your <app> here and fill it with whatever
>     you've got
> ...
>    </xsl:if>
> </xsl:template>
>
> >I am trying to create a NEW list of XML nodes from either file that meet
a
> >certain criteria.
>
> BTW (small point), as an English teacher I can't help but urge you to
> understand that "criteria" is a plural noun in our fine language (the word
> comes from Greek), and what you mean to say is "nodes from either file
that
> meet a certain criterion"... :->
>
> Note also that what I'm outlining is a *separate pass* (a pre-process) to
> create a list of <app> elements, not itself suitable for display. Handle
> that either in a second pass, or combine the logic (this is not prima
facie
> impossible) to create your output format with this merging logic, skipping
> the apps/app stage altogether.
>
> I hope that helps!
>
> Cheers,
> Wendell
>
> At 12:32 PM 8/27/2002, you wrote:
> >I have 2 different XML files that have different node structure, but
similar
> >information (both contain date related information)
> >
> >I am trying to create a NEW list of XML nodes from either file that meet
a
> >certain criteria.
> >
> >EXAMPLE FILE 1
> >
> ><events>
> ><event id='1'>
> >     <date>20020812</date>
> >     <name>event1</name>
> >     <fullname>big time event</fullname>
> ></event>
> ><event id='2'>
> >     <date>20020813</date>
> >     <name>event2</name>
> >     <fullname>mid time event</fullname>
> ></event>
> ><event id='3'>
> >     <date>20020815</date>
> >     <name>event3</name>
> >     <fullname>small time event</fullname>
> ></event>
> ></events>
> >
> >EXAMPLE FILE 2
> ><games>
> ><game id='1'>
> >     <date>20020813</date>
> >     <name>game1</name>
> >     <opponent>team b</opponent>
> >     <time>14:00</time>
> ></game>
> ><game id='2'>
> >     <date>20020818</date>
> >     <name>game2</name>
> >     <opponent>team c</opponent>
> >     <time>12:00</time>
> ></game>
> ></games>
> >
> >is there a way with a single XSLT file to get all the nodes from each
file
> >that meet a certain criteria and put their information into a new XML
node
> >structure?
> >
> >EXAMPLE COMBINED CREATED NODELIST (criteria: date between 20020814 and
> >20020821)
> >
> ><apps>
> ><app type="event" id="3">
> >     <date>20020815</date>
> >     <name>event3</name>
> >     <fullname>small time event</fullname>
> ></app>
> ><app type="game" id="2">
> >     <date>20020818</date>
> >     <name>game2</name>
> >     <opponent>team c</opponent>
> >     <time>12:00</time>
> ></app>
> ></apps>
> >
> >this nodelist could then be sorted and displayed (the display XSLT
routine
> >would handle the different @type nodes [game / event] so that even though
> >there would be different information (ie. fullname, opponent, time) the
> >combined list could be sorted and displayed
> >
> >but I can't figure how to create this COMBINED LIST within the XSLT file
> >
> >- Todd
> >
> >  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
>
>
> ======================================================================
> Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
> Mulberry Technologies, Inc.                http://www.mulberrytech.com
> 17 West Jefferson Street                    Direct Phone: 301/315-9635
> Suite 207                                          Phone: 301/315-9631
> Rockville, MD  20850                                 Fax: 301/315-8285
> ----------------------------------------------------------------------
>    Mulberry Technologies: A Consultancy Specializing in SGML and 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.