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 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
Miro MiricSubject: Parse text from XML, remember a local variable
Author: Miro Miric
Date: 19 Sep 2007 08:31 AM
Hi!

I'm pretty much new to XSL and I believe I have a pretty simple question.

I have to transform some XML data (that comes as an output from a program) that looks something like this:

<?xml version="1.0" encoding="UTF-8"?>
<Batch>
<Page>
<Field>
<Name>FileName</Name>
<Value>D:\test\output\00001.tif</Value>
</Field>
<Field>
<Name>Barcode</Name>
<Value>30101</Value>
</Field>
</Page>

<Page>
<Field>
<Name>FileName</Name>
<Value>D:\test\output\00002.tif</Value>
</Field>
</Page>

<Page>
<Field>
<Name>FileName</Name>
<Value>D:\test\output\00003.tif</Value>
</Field>
<Field>
<Name>Barcode</Name>
<Value>30102</Value>
</Field>
</Page>

<Page>
<Field>
<Name>FileName</Name>
<Value>D:\test\output\00004.tif</Value>
</Field>
</Page>

<Page>
<Field>
<Name>FileName</Name>
<Value>D:\test\output\00005.tif</Value>
</Field>
</Page>

</Batch>

to a text file that looks like this:

D:\test\output\00001.tif | 30101 |
D:\test\output\00002.tif | 30101 |
D:\test\output\00003.tif | 30102 |
D:\test\output\00004.tif | 30102 |
D:\test\output\00005.tif | 30102 |


So as you can see, some Page elements have a Field element with the Name Barcode but some don't. So I would like to keep a variable that contains the last Value of a Barcode and to put it to all next that are empty.


This is the XSL document that I wrote:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">

<xsl:for-each select="Batch/Page/Field">

<xsl:if test="Name = 'FileName'">
<xsl:value-of select="Value"/> | </xsl:if>
<xsl:if test="Name = 'Barcode'">
<xsl:variable name="var" select="Value"/>
</xsl:if>
<xsl:copy-of select="$var"/> | <xsl:text>&#xA;</xsl:text></xsl:for-each>
</xsl:template>
</xsl:stylesheet>


But my variable (var) is only remembered in the if block and I can't use it outside of it :(

I would appreciate any help. Thank you.

Postnext
Tony LavinioSubject: Parse text from XML, remember a local variable
Author: Tony Lavinio
Date: 19 Sep 2007 12:26 PM
Before we reply, which version of Stylus Studio are you using?

Postnext
Miro MiricSubject: Parse text from XML, remember a local variable
Author: Miro Miric
Date: 19 Sep 2007 12:35 PM
I believe the version is Stylus Studio XML Professional Edition 6.

Postnext
Tony LavinioSubject: Parse text from XML, remember a local variable
Author: Tony Lavinio
Date: 19 Sep 2007 01:43 PM
Try the attached.


Documentbar.xsl

Postnext
Miro MiricSubject: Parse text from XML, remember a local variable
Author: Miro Miric
Date: 20 Sep 2007 03:48 AM
Thank you very much, this did the trick! :)

Cheers!

Postnext
Miro MiricSubject: Parse text from XML, remember a local variable
Author: Miro Miric
Date: 20 Sep 2007 05:30 AM
I have one more question. The XML output from a program I use is very messy. Everything is in just one line, and when I use your XSL in Stylus Studio it results in the expected txt file, but when I use it in the, already mentioned program, which has an option: "Apply this XSL transformation to output after export", as a result I get an empty file.

Is it possible that this program doesn't know how to interpret the XSL file like Stylus Studio does?

Thanks!

Postnext
(Deleted User) Subject: Parse text from XML, remember a local variable
Author: (Deleted User)
Date: 20 Sep 2007 06:50 AM
Hi Miro,
what is this program?

Alberto

Postnext
Miro MiricSubject: Parse text from XML, remember a local variable
Author: Miro Miric
Date: 20 Sep 2007 07:05 AM
EMC's QuickScan Pro. The program scans some pages and reads barcode's from them. In the end it writes filenames and barcodes to XML files.

I understand this is more of a question for QSP's support but they are very cheap on information :)

Postnext
Miro MiricSubject: Parse text from XML, remember a local variable
Author: Miro Miric
Date: 20 Sep 2007 07:05 AM
EMC's QuickScan Pro. The program scans some pages and reads barcode's from them. In the end it writes filenames and barcodes to XML files.

I understand this is more of a question for QSP's support but they are very cheap on information :)

Posttop
(Deleted User) Subject: Parse text from XML, remember a local variable
Author: (Deleted User)
Date: 25 Sep 2007 08:10 AM
Hi Miro,
I can guess that QuickScan doesn't support the preceding-sibling axis; in case they do support following-sibling, you could rewrite the query to be

<xsl:template match="Field">
<xsl:variable name="curFile" select="Value"/>
<xsl:value-of select="Value"/>
<xsl:text>|</xsl:text>
<xsl:choose>
<xsl:when test="../Field[Name = 'Barcode']/Value">
<xsl:value-of select="../Field[Name = 'Barcode']/Value"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="../../Page[Field/Name = 'Barcode'][following-sibling::Page/Field/Value=$curFile][last()]/Field[Name = 'Barcode']/Value"/>
</xsl:otherwise>
</xsl:choose>
<xsl:text>&#xD;&#xA;</xsl:text>
</xsl:template>

In case they don't support even "following-sibling", replace it with "following". If they don't support "following", I guess you will have to manually apply the XSLT using a true XSLT processor....

Hope this helps,
Alberto

 
Topic Page 1 2 3 4 5 6 7 8 9 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.