Subject: Re: [xsl] Capture Range of Documents From: Brandon Ibach <brandon.ibach@xxxxxxxxxxxxxxxxxxx> Date: Wed, 5 Jan 2011 05:40:48 -0500 |
There seem to be two questions, here. First, how to process more than one file and merge the results together. I'll skip the details on that since I'm sure it's been covered here many times and the solution really depends on how you generate your list of files, which you didn't specify. The more interesting question is how to grab a range of sibling nodes starting with the first one which matches a certain criterion and ending with the first one after that which matches another criterion. One solution (assuming your code to loop through your files does an xsl:apply-templates on each file's document element): <xsl:template match="spoolpd"> <xsl:variable name="start" select="pd[a/cab/cod = '456'][1]"/> <xsl:variable name="range" select="$start | $start/following-sibling::pd[count(following-sibling::pd[a/cab/cod = '012']) = count($start/following-sibling::pd[a/cab/cod = '012'])] | $start/following-sibling::pd[a/cab/cod = '012'][1]"/> <xsl:copy-of select="$range"/> </xsl:template> Even simpler (relying less on XPath and more on XSLT): <xsl:template match="spoolpd"> <xsl:apply-templates select="pd[a/cab/cod = '456'][1]"/> </xsl:template> <xsl:template match="pd"> <xsl:copy-of select="."/> <xsl:if test="not(a/cab/cod = '012')"> <xsl:apply-templates select="following-sibling::pd[1]"/> </xsl:if> </xsl:template> -Brandon :) On Tue, Jan 4, 2011 at 9:11 PM, Jimenez, Luis <Luis.Jimenez@xxxxxxxxx> wrote: > Hi All, > > Happy New Year. > > I am working with XSLT 1.0. > > As I can capture with a XSL in several XML files ranging from documents according to their locations within the file, for example: > > Capturing all the documents from the code: 456, until the code: 012 > > ****************** > My XML1 File: > > <?xml version="1.0" encoding="iso-8859-1"?> > <spoolpd> > <pd use="x"> > <a> > <cab> > <cod>789</cod> > <name>Luis</name> > </cab> > </a> > </pd> > <pd use="x"> > <a> > <cab> > <cod>456</cod> > <name>Juan</name> > </cab> > </a> > </pd> > <pd use="y"> > <a> > <cab> > <cod>123</cod> > <name>Jose</name> > </cab> > </a> > </pd> > <pd use="z"> > <a> > <cab> > <cod>012</cod> > <name>Maria</name> > </cab> > </a> > </pd> > </spoolpd> > > ****************** > My XML2 File: > > <?xml version="1.0" encoding="iso-8859-1"?> > <spoolpd> > <pd use="a"> > <a> > <cab> > <cod>012</cod> > <name>James</name> > </cab> > </a> > </pd> > <pd use="b"> > <a> > <cab> > <cod>123</cod> > <name>Antonio</name> > </cab> > </a> > </pd> > <pd use="c"> > <a> > <cab> > <cod>456</cod> > <name>Mary</name> > </cab> > </a> > </pd> > <pd use="d"> > <a> > <cab> > <cod>789</cod> > <name>Julieth</name> > </cab> > </a> > </pd> > </spoolpd> > > ****************** > My output desired: > > <?xml version="1.0" encoding="iso-8859-1"?> > <spoolpd> > <pd use="x"> ==> capturing the first xml file (XML1) > <a> > <cab> > <cod>456</cod> > <name>Juan</name> > </cab> > </a> > </pd> > <pd use="y"> ==> capturing the first xml file (XML1) > <a> > <cab> > <cod>123</cod> > <name>Jose</name> > </cab> > </a> > </pd> > <pd use="z"> ==> capturing the first xml file (XML1) > <a> > <cab> > <cod>012</cod> > <name>Maria</name> > </cab> > </a> > </pd> > <pd use="c"> ==> capturing the second xml file (XML2) > <a> > <cab> > <cod>456</cod> > <name>Mary</name> > </cab> > </a> > </pd> > <pd use="d"> ==> capturing the second xml file (XML2) > <a> > <cab> > <cod>789</cod> > <name>Julieth</name> > </cab> > </a> > </pd> > </spoolpd> > > thank you very much for the help. > > Luis Fdo.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Capture Range of Documents, Jimenez, Luis | Thread | RE: [xsl] Capture Range of Document, Jimenez, Luis |
Re: [xsl] replacing nodes during xs, Andrew Welch | Date | RE: [xsl] Capture Range of Document, Jimenez, Luis |
Month |