xsl-list
[Top] [All Lists]

RE: [xsl] Capture Range of Documents

2011-01-05 13:44:11
Hi Brandon,

I do not know how to associate your response to the XSLT that I sent to work as 
required.

Can you help me to try adapting it.

Thanks,

Luis Fdo.

-----Mensaje original-----
De: Brandon Ibach [mailto:brandon(_dot_)ibach(_at_)single-sourcing(_dot_)com] 
Enviado el: Miércoles, 05 de Enero de 2011 02:00 p.m.
Para: xsl-list
Asunto: Re: [xsl] Capture Range of Documents

I could review your XSLT to determine why it isn't working the way you
want, but if the approach you're trying isn't working, perhaps you
could try something else.  I've already developed and tested a
complete XSLT stylesheet that produces the output you indicated you
wanted from the input you supplied.  The relevant snippets of that
stylesheet (two different versions, pick whichever one you like
better) were included in my initial response.

Have you tried the code I posted?  Did it work?  If not, what were the
problems?  Was there some other way in which this code was unsuitable
for your needs, perhaps due to an additional requirement that I
misunderstood or that you have not yet conveyed?

-Brandon :)


On Wed, Jan 5, 2011 at 12:54 PM, Jimenez, Luis 
<Luis(_dot_)Jimenez(_at_)xerox(_dot_)com> wrote:
Hi Brandon,

Annex the files for you to review.

*************************
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>

*************************
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>

*************************
XSL 1.0 File:

<?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="*"/>

 <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:\XML1.TXT'))/spoolpd/pd[a/cab/cod[.&gt;=document('')/*/xsl:variable[(_at_)name='from']/c]]">
 </xsl:variable>
 <xsl:variable name="condicion2" 
select="(document('C:\XML2.TXT'))/spoolpd/pd[a/cab/cod[.&gt;=document('')/*/xsl:variable[(_at_)name='from']/c]]">
 </xsl:variable>

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

</xsl:stylesheet>

*************************
The desired output is only from a position (from cod:456) in each of the 
files to another position later (until cod: 012):

<?xml version="1.0" encoding="iso-8859-1"?> <spoolpd> <pd use="x"> ==> XML1 
File
 <a>
   <cab>
     <cod>456</cod>
     <name>Juan</name>
   </cab>
 </a>
 </pd>
<pd use="y"> ==> XML1 File
 <a>
   <cab>
     <cod>123</cod>
     <name>Jose</name>
   </cab>
 </a>
 </pd>
<pd use="z"> ==> XML1 File
 <a>
   <cab>
     <cod>012</cod>
     <name>Maria</name>
   </cab>
 </a>
 </pd>
<pd use="c"> ==> XML2 File
 <a>
   <cab>
     <cod>456</cod>
     <name>Mary</name>
   </cab>
 </a>
 </pd>
 <pd use="d"> ==> XML2 File
 <a>
   <cab>
     <cod>789</cod>
     <name>Julieth</name>
   </cab>
 </a>
 </pd>
</spoolpd>

Thank for the help.

Luis Fdo.

-----Mensaje original-----
De: Brandon Ibach [mailto:brandon(_dot_)ibach(_at_)single-sourcing(_dot_)com]
Enviado el: Miércoles, 05 de Enero de 2011 11:32 a.m.
Para: xsl-list
Asunto: Re: [xsl] Capture Range of Documents

I don't understand what you're asking for, here.  You provided
examples of two input files and the desired output and I supplied code
that would produce that output from those inputs (provided appropriate
code around it to iterate over the two files and build the overall
document).  Have your requirements changed?  In what way?

-Brandon :)


On Wed, Jan 5, 2011 at 10:06 AM, Jimenez, Luis 
<Luis(_dot_)Jimenez(_at_)xerox(_dot_)com> wrote:
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[(_at_)name='from']/c]
 and a/cab/cod[.&lt;=document('')/*/xsl:variable[(_at_)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(_dot_)ibach(_at_)single-sourcing(_dot_)com]
Enviado el: Miércoles, 05 de Enero de 2011 05:41 a.m.
Para: xsl-list
Asunto: Re: [xsl] 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(_dot_)Jimenez(_at_)xerox(_dot_)com> 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.


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>