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

RE: Capture Range of Documents

Subject: RE: Capture Range of Documents
From: "Jimenez, Luis" <Luis.Jimenez@xxxxxxxxx>
Date: Wed, 5 Jan 2011 10:06:51 -0500
RE:  Capture Range of Documents
Hi Brandon,

I have the following xsl, but this only captures if the value is greater or
less than, and therefore can capture the first <pd> is not needed, so I have
not been able to do is capture from one position (<pd>) to another determined
position (<pd>).

I appreciate the help you can give me.

*****************************+
My XSL:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" version="1.0" encoding="iso-8859-1" indent="yes"/>
<xsl:strip-space elements="*"/> <!-- Quita Los Espacios en Blanco de cada
Elemento -->

<xsl:variable name="from"><c>456</c></xsl:variable>
<xsl:variable name="until"><c>012</c></xsl:variable>

<xsl:variable name="condicion1" select="(document('C:\
PRUEBAS.TXT'))/spoolpd/pd[a/cab/cod[.&gt;=document('')/*/xsl:variable[@name='
from']/c] and a/cab/cod[.&lt;=document('')/*/xsl:variable[@name='until']/c]]">
</xsl:variable>

<xsl:template match="/">
<spoolpd>
<xsl:for-each select="$condicion1">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:copy-of select="a"/>
</xsl:copy>
</xsl:for-each>
</spoolpd>
</xsl:template>

</xsl:stylesheet>


Thanks,

Luis Fdo.

-----Mensaje original-----
De: Brandon Ibach [mailto:brandon.ibach@xxxxxxxxxxxxxxxxxxx]
Enviado el: Miircoles, 05 de Enero de 2011 05:41 a.m.
Para: xsl-list
Asunto: Re:  Capture Range of Documents

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

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.