Subject: Re: [xsl] combining 2 different XML files within the same XSLT From: "Todd Binder" <todd_binder@xxxxxxxxxxx> Date: Tue, 27 Aug 2002 23:17:44 -0400 |
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: [xsl] 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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] combining 2 different XML, Wendell Piez | Thread | Re: [xsl] combining 2 different XML, Jeni Tennison |
[xsl] xalan 2.4 transformation to f, T | Date | [xsl] Readily Available Parsers, Exide Arabellan |
Month |