XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
Simon TemplarSubject: 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.

Regards.


DocumentValidationSuccessful.xml
Validation Successful file

DocumentPartialFailure.xml
Partial Failure file

DocumentXMLFailure.xml
XML Failure file

DocumentFSATRSValidationReport-v1-0.xsd
ValidationReport schema

Postnext
(Deleted User) Subject: Conditional processing in XSLT for varying format XML files.
Author: (Deleted User)
Date: 15 Sep 2005 05:51 AM
Hi Simon,
a very simple stylesheet could be the following:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:vr="http://www.fsa.gov.uk/XMLSchema/FSATRSValidationReport-v1-0">
<xsl:output method="html"/>

<xsl:template match="/">
<xsl:choose>
<xsl:when test="vr:TRSValidationReport/vr:ValidationResult/vr:ValidationStatus[. = 'OK']">
<xsl:call-template name="ProcessValidResult"/>
</xsl:when>
<xsl:when test="vr:TRSValidationReport/vr:ValidationResult/vr:ValidationStatus[. = 'Partial Failure']">
<xsl:call-template name="ProcessInvalidResult"/>
</xsl:when>
<xsl:when test="vr:TRSValidationReport/vr:ValidationResult/vr:ValidationStatus[. = 'XML Fail']">
<xsl:call-template name="ProcessInvalidXML"/>
</xsl:when>
</xsl:choose>
</xsl:template>

<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:for-each select="/vr:TRSValidationReport/vr:TransactionErrorDetails">--------------------<br/>
<xsl:value-of select="vr:TxnFailureDetails/vr:FailureType"/>
<br/>
<xsl:value-of select="vr:TxnFailureDetails/vr:FailureReason"/>
<br/>
</xsl:for-each>
</xsl:template>

<xsl:template name="ProcessInvalidXML">Report is not valid XML: <xsl:value-of select="/vr:TRSValidationReport/vr:ValidationResult/vr:ErrorDescription"/></xsl:template>
</xsl:stylesheet>


Hope this helps,
Alberto

Postnext
Simon TemplarSubject: 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.

Many thanks for your help.

Regards.


DocumentCISRI_Validate_Rpt.cmd
Batch Script

DocumentValidationReportv1.xsl
XSLT v1

DocumentValidationReportv2.xsl
XSLT v2

Postnext
(Deleted User) 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?

Thanks,
Alberto

Postnext
Tony LavinioSubject: Conditional processing in XSLT for varying format XML files.
Author: Tony Lavinio
Date: 15 Sep 2005 09:53 AM
I will get the file to Alberto; it seems some firewall software
is blocking it because it is a .cmd file. No need to re-upload.

Postnext
Simon TemplarSubject: 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.

Regards.


DocumentCISRI_Validate_Rpt.txt
Batch script

Postnext
(Deleted User) 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:")

Hope this helps,
Alberto

Posttop
Simon TemplarSubject: 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.

 
Topic Page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.