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
Nandhini ShyamSubject: Concatenate same input element values into one output element
Author: Nandhini Shyam
Date: 06 Nov 2008 05:03 PM
Originally Posted: 06 Nov 2008 04:54 PM
Hi all,

I am newbie to XSL programming.

I have this input.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<RESULTS>
<SQL10>
<RESULTSET_1>
<ROW>
<ID>ID1</ID>
<TXT>TEXT 1</TXT>
</ROW>
<ROW>
<ID>ID2</ID>
<TXT>TEXT 2</TXT>
</ROW>
<ROW>
<ID>ID1</ID>
<TXT>TEXT 3</TXT>
</ROW>
<ROW>
<ID>ID2</ID>
<TXT>TEXT 4</TXT>
</ROW>
</RESULTSET_1>
</SQL10>
</RESULTS>

And my output should be of:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<RESULTS>
<SQL10>
<RESULTSET_1>
<ROW>
<ID>ID1</ID>
<TXT>TEXT 1 (CR/LF - Carriage Return/Line Feed) TEXT 3</TXT>
</ROW>
<ROW>
<ID>ID2</ID>
<TXT>TEXT 2 (CR/LF - Carriage Return/Line Feed) TEXT 4</TXT>
</ROW>
</RESULTSET_1>
</SQL10>
</RESULTS>

All the same IDs should have its TXT values grouped together, separated by (CR/LF - Carriage Return/Line Feed)

From my newbie XSL knowledge

I started doing this:

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

<xsl:template match="/">
<RESULTS>
<SQL10>
<RESULTSET_1>
<xsl:for-each select="//ROW">
<ROW>
<ID><xsl:value-of select="ID"/></ID>
<TXT>
<xsl:for-each select="TXT">
<xsl:choose>
<xsl:when test=". and string-length(normalize-space(.))=0">
<xsl:value-of select="'.'"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</TXT>
</ROW>
</xsl:for-each>
</RESULTSET_1>
</SQL10>
</RESULTS>
</xsl:template>
</xsl:stylesheet>

Ofcourse its not working as expected.

Can you please help me out. Many thanks !!

Postnext
James DurningSubject: Concatenate same input element values into one output element
Author: James Durning
Date: 07 Nov 2008 03:24 PM
Originally Posted: 07 Nov 2008 03:23 PM
The best way is probably Muenchian grouping:
http://www.jenitennison.com/xslt/grouping/muenchian.html

Change this from:
<xsl:for-each select="//ROW">
to:
<xsl:for-each select="//ROW[not(preceding::ROW[ID = current()/ID])]">

Then when getting the values you would get all rows with the same ID.
<xsl:for-each select="//ROW[ID = current()/ID]">

Posttop
Nandhini ShyamSubject: Concatenate same input element values into one output element
Author: Nandhini Shyam
Date: 07 Nov 2008 04:32 PM
Thanks...

working that way now :-)

 
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.