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
Conferences Close Tree View
+ Stylus Studio Feature Requests (1192)
+ Stylus Studio Technical Forum (14621)
+ Website Feedback (249)
- XSLT Help and Discussion (7625)
-> + Flatten an XML source (2)
-> + Problem in navigating tree (2)
-> + preserve line breaks in xml at... (4)
-> + XSLT to PDF (2)
-> + Replace a nodeset with another... (3)
-> + Nested variable compile error ... (5)
-> + Replace a nodeset with another... (2)
-> + StackOverFlow Error, while com... (4)
-> + Footnote - WORDML (6)
-> + Concatenate same input element... (3)
-> + Need to remove the sub element... (3)
-> + Grabbing sub-namespace values (2)
-> + Converting date via browser XS... (4)
-> + Selecting Attribute nodes (2)
-> + XSLT totaling numeric values (4)
-> + Two line output by breaking on... (3)
-> + Encoding Option for base64Bina... (2)
-> + using document and web service... (2)
-> + XSLT transformations with JDK1... (8)
-> - Parsing Excel XML - Selectiing... (1)
-> + Grouping this xml input very n... (2)
-> + XSL-FO page-sequence and blank... (2)
-> + Need Help In XSLT Mapping (3)
-> + how to create the Tables by co... (2)
-> + fo:external-graphic - Image ... (2)
-> + Mapping complex document with ... (8)
-> + Sorting in XSLT (2)
-> + xsl date time adding... (16)
-> - Flat XML to nested XML convers... (1)
-> + parser for parsing XSL file (2)
-> - q on group function (1)
-> + compare 2 date value using xsl (2)
-> - Remove namespaces from SOAP pa... (1)
-> + Numeric string not displaying ... (3)
-> + where is the old HTM to XSL wi... (2)
-> + XSLT variable path (2)
-> + Sort by lookup values & styles... (2)
-> + Hi without hard code filed na... (2)
-> + XSLT output does not work (2)
-> + How can I do this javascript i... (2)
-> + Paging with XSL and passing UR... (2)
-> + XPath Condition Query (3)
-> + Xalan Multiple XML Output Over... (3)
-> + Inserting Line Break (2)
-> + Get Value from non-standard xm... (2)
-> + Root node renaming and adding ... (2)
-> + Cannot get CDATA to render pro... (2)
-> - How to add a footer on reports... (1)
-> - Apply-templates and processing... (1)
-> + Help Please - Use data from no... (5)
-> - Behaviour of trace function (1)
-> + How to Build a Dynamic XPath E... (3)
-> - raw xml to generic xml (1)
-> - Merging two documents (1)
-> + XSLT Path help (3)
-> + how to sort, dates in xsl ? (3)
-> + Naming elements (3)
-> + XSL IF Statement (2)
-> + XSLT Help Needed (4)
-> + Character Increment (4)
-> - concat function not working wi... (1)
-> + XSLT only namespace attribute ... (2)
-> - using uri within RSS enclosure... (1)
-> + Transforming Data With XSLT (3)
-> + Validate XPath on variable (8)
-> - flatten xml structure then sor... (1)
-> + SYNTAX not working (2)
-> + Looping through xml document (3)
-> + can i modify the xml data in X... (2)
-> + can i modify the xml data in X... (2)
-> + regex (2)
-> + xslt document and web services... (2)
-> + looping question (2)
-> + XML to Excel Conversion using ... (4)
-> + Compare (2)
-> + problem in loadxml function (2)
-> + does IE support script in xsl (2)
-> + converting Time format (2)
-> + Single Message split into Mult... (5)
-> + xml template design (2)
-> + String to array (2)
-> + Page Break with XSL-FO (4)
-> + Need help Translating string (2)
-> + Transforming input xml paramet... (3)
-> + How to transform node from inc... (2)
-> + XSL:FO Marker Question (2)
-> + trim after character...? (2)
-> + Convernting CSS + xsl to XSL:F... (2)
-> + save external image in xml/xsl (3)
-> + Table of Contents (2)
-> + Problem with select expression (2)
-> + Slow for-each select (7)
-> + Restructuring XML (2)
-> + Coloring xml output (3)
-> + Looping through xsl based on a... (5)
-> + Where is the wizard? (3)
-> + Save XML thru href (2)
-> + existing xslt, source and dest... (5)
-> + spliting xml files by certain ... (8)
-> + checking condition and writing... (2)
-- Previous [481-500] [501-520] [521-540] Next
+ XQuery Help and Discussion (2016)
+ Stylus Studio FAQs (159)
+ Stylus Studio Code Samples & Utilities (364)
+ Stylus Studio Announcements (113)
Topic  
Postnext
tera m.Subject: special xsl transformation
Author: tera m.
Date: 24 Feb 2005 07:27 AM
Hi everyone,
i would like to know how can i do a special xsl transformation.

for example, if my XML file is:
********************************
<?xml version="1.0"?>
<root>
<row>
<field>
<name>Identity</name>
<value>10.0</value>
</field>
<field>
<name>Sumary</name>
<value>1700.0</value>
</field>
<field>
<name>Tax Type</name>
<value>G</value>
</field>
<field>
<name>Tax Sum</name>
<value>160.0</value>
</field>
<field>
<name>Date</name>
<value>Fri Feb 04 00:00:00 IST 2005</value>
</field>
</row>
<row>
<field>
<name>Identity</name>
<value>10.0</value>
</field>
<field>
<name>Sumary</name>
<value>900.0</value>
</field>
<field>
<name>Tax Type</name>
<value>H</value>
</field>
<field>
<name>Tax Sum</name>
<value>90.0</value>
</field>
<field>
<name>Date</name>
<value>Fri Feb 04 00:00:00 IST 2005</value>
</field>
</row>
<row>
<field>
<name>Identity</name>
<value>10.0</value>
</field>
<field>
<name>Sumary</name>
<value>800.0</value>
</field>
<field>
<name>Tax Type</name>
<value>P</value>
</field>
<field>
<name>Tax Sum</name>
<value>53.0</value>
</field>
<field>
<name>Date</name>
<value>Fri Feb 04 00:00:00 IST 2005</value>
</field>
</row>
<row>
<field>
<name>Identity</name>
<value>20.0</value>
</field>
<field>
<name>Sumary</name>
<value>41.0</value>
</field>
<field>
<name>Tax Type</name>
<value>P</value>
</field>
<field>
<name>Tax Sum</name>
<value>4.0</value>
</field>
<field>
<name>Date</name>
<value>Fri Dec 02 00:00:00 IST 2005</value>
</field>
</row>
<row>
<field>
<name>Identity</name>
<value>20.0</value>
</field>
<field>
<name>Sumary</name>
<value>91.0</value>
</field>
<field>
<name>Tax Type</name>
<value>Q</value>
</field>
<field>
<name>Tax Sum</name>
<value>9.0</value>
</field>
<field>
<name>Date</name>
<value>Fri Dec 02 00:00:00 IST 2005</value>
</field>
</row>
<row>
<field>
<name>Identity</name>
<value>30.0</value>
</field>
<field>
<name>Sumary</name>
<value>200.0</value>
</field>
<field>
<name>Tax Type</name>
<value>H</value>
</field>
<field>
<name>Tax Sum</name>
<value>35.0</value>
</field>
<field>
<name>Date</name>
<value>Sat Apr 10 00:00:00 IDT 2004</value>
</field>
</row>
<row>
<field>
<name>Identity</name>
<value>30.0</value>
</field>
<field>
<name>Sumary</name>
<value>200.0</value>
</field>
<field>
<name>Tax Type</name>
<value>P</value>
</field>
<field>
<name>Tax Sum</name>
<value>20.0</value>
</field>
<field>
<name>Date</name>
<value>Sat Apr 10 00:00:00 IDT 2004</value>
</field>
</row>
<row>
<field>
<name>Identity</name>
<value>40.0</value>
</field>
<field>
<name>Sumary</name>
<value>1540.0</value>
</field>
<field>
<name>Tax Type</name>
<value>G</value>
</field>
<field>
<name>Tax Sum</name>
<value>412.0</value>
</field>
<field>
<name>Date</name>
<value>Tue Aug 31 00:00:00 IDT 2004</value>
</field>
</row>
</root>

And i wanna transform it to a text file of this format:

"indentity,max Sumary,G Tax Sum,H Tax Sum,P Tax Sum,Q Tax Sum,Date"

For example:

10.0,1700.0,160.0,90.0,53.0,,04022005
20.0,91.0,,,4.0,9.0,02122005
.
.
.

Notice that when a Tax Type doen't appear in an Identity,
his value will b ,, in the Text file.
Also: the max Sumary is taken for each Identity.


How can i do all of that?
Is that easier to do it with 2 XSL stylesheets?

Any help will be welcome...

Thank you for helping,
Tera.

Postnext
Ivan PedruzziSubject: special xsl transformation
Author: Ivan Pedruzzi
Date: 24 Feb 2005 04:17 PM
You are trying to transform XML to CSV.
The topic has been repeatedly discussed on this forum
The following XSLT is yet another example
Hope this helps
Ivan

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="/">
<xsl:for-each select="root/row[1]/field">
<xsl:value-of select="name"/>
<xsl:if test="position() != last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each><xsl:text>
</xsl:text>
<xsl:apply-templates select="/root/row"/>
</xsl:template>

<xsl:template match="row">
<xsl:apply-templates select="field"/><xsl:text>
</xsl:text>
</xsl:template>

<xsl:template match="field">
<xsl:apply-templates select="value"/>
<xsl:if test="position() != last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:template>

<xsl:template match="value">
<xsl:value-of select="."/>
</xsl:template>

<xsl:template match="text()"/>
</xsl:stylesheet>


Identity, Sumary, Tax Type, Tax Sum, Date
10.0, 1700.0, G, 160.0, Fri Feb 04 00:00:00 IST 2005
10.0, 900.0, H, 90.0, Fri Feb 04 00:00:00 IST 2005
10.0, 800.0, P, 53.0, Fri Feb 04 00:00:00 IST 2005
20.0, 41.0, P, 4.0, Fri Dec 02 00:00:00 IST 2005
20.0, 91.0, Q, 9.0, Fri Dec 02 00:00:00 IST 2005
30.0, 200.0, H, 35.0, Sat Apr 10 00:00:00 IDT 2004
30.0, 200.0, P, 20.0, Sat Apr 10 00:00:00 IDT 2004
40.0, 1540.0, G, 412.0, Tue Aug 31 00:00:00 IDT 2004

Postnext
tera m.Subject: to Ivan, and for everyone else who can help...
Author: tera m.
Date: 26 Feb 2005 01:15 PM
Hi,
thanks for trying to help me,
but I still have problems with my issue.
I guess i didn't explain myself very well,
so I'm gonna try to do it better know:
I don't know exactly what is CSV,
but it doesn't seemed to b what i want.

What i want is a text file of this format:
Identity,Sumary,TaxSum of G TaxType,TaxSum of H TaxType,TaxSum of P TaxType,TaxSum of Q TaxType,TaxSum,Date

Meaning-

1. For every "Identity" there is only 1 line matching (on the final text file).

2. The Taxes Types won't appear on the final file, only their Sum.
For every line (=1 Identity)-
all the Taxes Sums related to that Identity will be written on that line.

3. If one of the Identity doen't have one of the Tax Type,
the sum of this tax will be written as nothing.
For example-
the Identity 10.0 doesn't have a Q tax,
so it's line will b like this:

10.0,1700.0,160.0,90.0,53.0,,04022005


*The final file will be:

10.0,1700.0,160.0,90.0,53.0,,04022005
20.0,91.0,,,4.0,9.0,02122005
30.0,200.0,,35.0,20.0,,10042004
40.0,1540.0,412.0,,,,31082004


Btw, I would like also the date to b as written below DDMMYYYY,
only if that's possible.

Thank You very much!!
Every help is welcome!

Tera.

Postnext
Ivan PedruzziSubject: to Ivan, and for everyone else who can help...
Author: Ivan Pedruzzi
Date: 27 Feb 2005 11:02 PM
I see, try the following

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="Identity" match="root/row" use="field[name='Identity']/value"/>
<xsl:output method="text"/>

<xsl:template match="/">
<xsl:for-each select="/root/row">

<xsl:variable name="group" select="key('Identity', field[name='Identity']/value)"/>

<xsl:if test="generate-id(.) = generate-id($group[1])">
<!-- Indentity -->
<xsl:value-of select="field[name='Identity']/value"/>
<!-- Sumary -->
<xsl:text> </xsl:text>
<xsl:call-template name="max">
<xsl:with-param name="nodeset" select="$group/field[name='Sumary']/value"/>
</xsl:call-template>
<!-- TaxSum of G TaxType -->
<xsl:text>, </xsl:text>
<xsl:value-of select="$group/field[name='Tax Type' and value='G']/value/../../field[name='Tax Sum']/value"/>
<!-- TaxSum of H TaxType -->
<xsl:text>, </xsl:text>
<xsl:value-of select="$group/field[name='Tax Type' and value='H']/value/../../field[name='Tax Sum']/value"/>
<!-- TaxSum of P TaxType -->
<xsl:text>, </xsl:text>
<xsl:value-of select="$group/field[name='Tax Type' and value='P']/value/../../field[name='Tax Sum']/value"/>
<!-- TaxSum of Q TaxType -->
<xsl:text>, </xsl:text>
<xsl:value-of select="$group/field[name='Tax Type' and value='Q']/value/../../field[name='Tax Sum']/value"/>
<!-- Date -->
<xsl:text>, </xsl:text>
<xsl:call-template name="format-date">
<xsl:with-param name="date" select="field[name='Date']/value"/>
</xsl:call-template>
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>

<xsl:template name="max">
<xsl:param name="max" select="0"/>
<xsl:param name="nodeset"/>
<xsl:param name="index" select="1"/>

<xsl:variable name="newmax">
<xsl:choose>
<xsl:when test="$nodeset[$index] > $max">
<xsl:value-of select="$nodeset[$index]"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$max"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>

<xsl:if test="$nodeset[$index+1]">
<xsl:call-template name="max">
<xsl:with-param name="max" select="$newmax"/>
<xsl:with-param name="nodeset" select="$nodeset"/>
<xsl:with-param name="index" select="$index+1"/>
</xsl:call-template>
</xsl:if>

<xsl:if test="count($nodeset) = $index">
<xsl:value-of select="$newmax"/>
</xsl:if>
</xsl:template>


<xsl:template name="format-date">
<xsl:param name="date"/>
<xsl:value-of select="substring($date, 9, 2)"/>
<xsl:variable name="month" select="substring($date, 5, 3)"/>
<xsl:choose>
<xsl:when test="$month = 'Jan'">01</xsl:when>
<xsl:when test="$month = 'Feb'">02</xsl:when>
<xsl:when test="$month = 'Mar'">03</xsl:when>
<xsl:when test="$month = 'Apr'">04</xsl:when>
<xsl:when test="$month = 'May'">05</xsl:when>
<xsl:when test="$month = 'Jun'">06</xsl:when>
<xsl:when test="$month = 'Jul'">07</xsl:when>
<xsl:when test="$month = 'Aug'">08</xsl:when>
<xsl:when test="$month = 'Sep'">09</xsl:when>
<xsl:when test="$month = 'Oct'">10</xsl:when>
<xsl:when test="$month = 'Nov'">11</xsl:when>
<xsl:when test="$month = 'Dec'">12</xsl:when>
</xsl:choose>
<xsl:value-of select="substring($date, string-length($date)-3)"/>
</xsl:template>
</xsl:stylesheet>

Posttop
tera m.Subject: Thank u!
Author: tera m.
Date: 03 Mar 2005 12:08 AM
Thanks so much for the help!
U r a genius!

Except from some <xsl:text>,</xsl:text> that r missing,
your XSLT does exactly what I'm looking for!! :)

Thanks again,
Tera.

   
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.