It seems that under PARAMETERS, you want to copy either the FILE that was
under PARAMETERS in the input, or the FILE that was under OUTPUT in the
input, whichever comes last. So change your /RESULT/PARAMETERS template to:
<xsl:template match="PARAMETERS">
<xsl:copy>
<xsl:apply-templates
select="*[not(self::FILE)][not(self::FILENAME)]"/>
<xsl:copy-of select="(FILE | /RESULT/OUTPUT/FILE)[last()]" />
<xsl:copy-of select="(FILENAME | /RESULT/OUTPUT/FILENAME)[last()]"
/>
<xsl:copy>
</xsl:template>
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: Higino Silva [mailto:hssilva(_at_)tmn(_dot_)pt]
Sent: 24 March 2006 17:32
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Conditional statements in XSLT
Hi all,
I'm using Xalan J XSLT processor, version 2.7.0, and though I
don't have a particular problem with the implementation of
Xalan I'm having trouble implementing one of the requirements
for our project, I'm even not sure if is at all possible to
do it applying only XSL transformations.
Can anyone advise me on this one?
******* Problem Description: ***********
I have the following input xml document:
<RESULT>
<PARAMETERS>
<CYCLE>
<ENDDATE>20060215</ENDDATE>
</CYCLE>
<FILE><CHECK/></FILE>
</PARAMETERS>
<OUTPUT>
<FILE>b</FILE>
<FILENAME>E:\ftphome\vodafone\xml\CC20060215S50.XML</FILENAME>
</OUTPUT>
</RESULT>
Now, the resulting xml should have the FILE and FILENAME tags
belonging to OUTPUT element transferred to PARAMETERS
element, which I can do with no effort at all with the
following template:
<--! Coy input node to the output -->
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="OUTPUT"></xsl:template> <!--Output node
is not copied to output -->
<--! Copy output nodes to Parameters element -->
<xsl:template match="/RESULT/PARAMETERS">
<xsl:copy>
<xsl:copy-of select="/RESULT/OUTPUT/*" />
<xsl:apply-templates />
<xsl:copy>
</xsl:template>
The tricky thing here is that if the FILE/FILENAME tag (or
any tag under OUTPUT) exists under PARAMETERS, then the tag
under PARAMETERS should be overwritten by correspondent
OUTPUT tag. In this case the correct output should be the following:
<RESULT>
<PARAMETERS>
<CYCLE>
<ENDDATE>20060215</ENDDATE>
</CYCLE>
<FILE>b</FILE>
<FILENAME>E:\ftphome\vodafone\xml\CC20060215S50.XML</FILENAME>
</PARAMETERS>
</RESULT>
I would much appreciate some help,.
Many many thanks
Higino Silva
AVISO
Esta mensagem e quaisquer anexos seus podem conter informação
confidencial para uso exclusivo do destinatário. Cabe ao
destinatário assegurar a verificação de vírus e outras
medidas que assegurem que esta mensagem não afecta os seus
sistemas. Se não for o destinatário, não deverá usar,
distribuir ou copiar este e-mail, devendo proceder à sua
eliminação e informar o emissor. É estritamente proibido o
uso, a distribuição, a cópia ou qualquer forma de
disseminação não autorizada deste e-mail e seus anexos. Obrigado.
DISCLAIMER
This e-mail and its attachments may contain confidential
information for exclusive use of its recipient. It is your
responsibility to carry out appropriate virus and other
checks to ensure that this message and any attachments do not
affect your systems / data. If you are not the intended
recipient you must not use, distribute or reproduce this
e-mail and you must notify the sender and delete the entire
email. Any unauthorized use, dissemination, distribution or
copying of this message and its attachments is strictly
prohibited. Thank You.
--~------------------------------------------------------------------
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>
--~--