Subject:Conditional processing in XSLT for varying format XML files. Author:Simon Templar Date:14 Sep 2005 12:00 PM
Hi,
I want to create a single XSLT that processes 3 different types of XML files having different tags/elements depending on the value of <ValidationStatus> element.
For example, if I have the <ValidationStatus>OK</ValidationStatus> then I want only certain elements to be processed in the XSLT and the XML file and so forth. The attached files would make my question clear. How can I achieve it?
I am attaching the sample XML files and the schema. As always any help is appreciated.
<xsl:template name="ProcessValidResult">Report is valid (<xsl:value-of select="/vr:TRSValidationReport/vr:ValidationResult/vr:SuccessfulTransactions"/>/<xsl:value-of select="/vr:TRSValidationReport/vr:ValidationResult/vr:TotalTransactions"/>)</xsl:template>
<xsl:template name="ProcessInvalidResult">Report is not valid (<xsl:value-of select="/vr:TRSValidationReport/vr:ValidationResult/vr:SuccessfulTransactions"/>/<xsl:value-of select="/vr:TRSValidationReport/vr:ValidationResult/vr:TotalTransactions"/>)<br/>
<xsl:template name="ProcessInvalidXML">Report is not valid XML: <xsl:value-of select="/vr:TRSValidationReport/vr:ValidationResult/vr:ErrorDescription"/></xsl:template>
</xsl:stylesheet>
Subject:Conditional processing in XSLT for varying format XML files. Author:Simon Templar Date:15 Sep 2005 08:01 AM
Thanks Alberto. I tried the above XSLT but I get an empty output using command-line transformation.
I understood the clever & simple solution that you've proposed but I have little understanding of the syntax where you mention "Report is..." and why you've used "<br>" tags. I tried to creat an XSLT myself using XSLT Mapper and then added the checks following your solution but even that is not working. I am attaching the batch script that I use and the XSLTs that I've used.
Subject:Conditional processing in XSLT for varying format XML files. Author:(Deleted User) Date:15 Sep 2005 09:28 AM
Hi Simon,
I tried both XSL stylesheet againt the original XML files, and they work for me from within Stylus Studio; however, I could not download the .cmd file ("file missing").
Can you upload it again?
Subject:Conditional processing in XSLT for varying format XML files. Author:Simon Templar Date:15 Sep 2005 09:58 AM
>Hi Simon,
>I tried both XSL stylesheet
>againt the original XML files,
>and they work for me from
>within Stylus Studio; however,
>I could not download the .cmd
>file ("file missing").
>Can you upload it again?
>
>Thanks,
>Alberto
Thanks for a prompt reply. I'd like to explain again what I am trying to achieve. I want to take the three input files as attached in my original post but they wont be having the following:
<TRSValidationReport xmlns="http://www.fsa.gov.uk/XMLSchema/FSATRSValidationReport-v1-0">
and instead all three have the following:
<TRSValidationReport>
I'd like to have a single XSLT that has ALL the common elements for three input files viz.
<SubmttedReportDetails>
<FileName>bloggs.xml</FileName>
<ReportType>HSFPP</ReportType>
<FeedTargetSchemaVersion>1.2</FeedTargetSchemaVersion>
<SubmittingFirm>123456</SubmittingFirm>
<SubmittingDept>ABC123</SubmittingDept>
<ReportCreationDate>2004-04-01</ReportCreationDate>
<ReportIdentifier>ABC/123/22</ReportIdentifier>
</SubmttedReportDetails>
and other elements according to each file. The output files should look like the original files attached in my original post.
Also, here's the batch file (in case there's a problem uploading it; my guess is that the firewall might not be allowing it to upload from my side):
@echo off
@echo Deleting previous logs...
REM DEL *.log
@echo Applying the stylesheet...
@"C:\Program Files\Stylus Studio 6 XML Enterprise Edition\bin\stylusXslt" -in CISRI_Test_valid_v2_rpt.xml -XSLT SSDNSolution.xsl -out CISRI_Test_valid_v2_rpt_fmtd.xml 2> Stylesheet_OK.log
@if errorlevel 1 goto errorStylesheet
@echo Validating XML now...
@"C:\Program Files\Stylus Studio 6 XML Enterprise Edition\bin\StylusValidator" -schema "http://www.fsa.gov.uk/XMLSchema/FSATRSValidationReport-v1-0.xsd" CISRI_Test_valid_v2_rpt_fmtd.xml > Validation_OK.log
@if errorlevel 1 goto errorValidation
DEL Stylesheet_OK.log
@echo File validated successfully...
@goto ok
:errorStylesheet
REN Stylesheet_OK.log Stylesheet_Error.log
@echo Process failed during Stylesheet step...check Stylesheet log
@goto end
:errorValidation
@echo Process failed during Validation step...check Validation log
DEL Stylesheet_OK.log
REN Validation_OK.log Validation_Error.log
@goto end
:ok
@echo Processing complete
:end
PS: I am renaming the cmd extension to txt to bypass firewall rules. So if you want to run it then simply rename txt to cmd.
Subject:Conditional processing in XSLT for varying format XML files. Author:(Deleted User) Date:15 Sep 2005 03:04 PM
Hi Simon,
thanks for the renamed script (download works now).
In your last message you say that the incoming files will not have the xmlns="...." attribute on the root node; this is an important change, as all the XPath expressions in the XSLT stylesheet look for elements in that namespace but, missing that declaration, all the elements in the XML sources are in the empty namespace.
You need to fix the XSLT stylesheet to remove all the prefixes from the XPath queries (in my original file they were "vr:", in your copies they were "a:")
Subject:Conditional processing in XSLT for varying format XML files. Author:Simon Templar Date:16 Sep 2005 04:50 AM
>Hi Simon,
>thanks for the renamed script
>(download works now).
>In your last message you say
>that the incoming files will
>not have the xmlns="...."
>attribute on the root node;
>this is an important change,
>as all the XPath expressions
>in the XSLT stylesheet look
>for elements in that namespace
>but, missing that declaration,
>all the elements in the XML
>sources are in the empty
>namespace.
Thanks again Alberto. I understand the point about having xmlns in the files. I found out that the third-party had a problem and that's why the reports that they were generating initially did not have the xmlns attribute. I have tested again with new files and downloaded new reports and the problem seems to be fixed now.
>You need to fix the XSLT
>stylesheet to remove all the
>prefixes from the XPath
>queries (in my original file
>they were "vr:", in your
>copies they were "a:")
>
>Hope this helps,
>Alberto
I'll follow your instructions regarding replacing 'vr:' with 'a:' and try again.