This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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@mulberrytech.com
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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]