[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Comma Separated Values - XSLT1.0

Subject: Re: Comma Separated Values - XSLT1.0
From: Anton Triest <anton@xxxxxxxx>
Date: Thu, 21 Oct 2004 11:53:03 +0200
xsl comma separated
Hi Allan,

I have 2 XML elements each containing comma separated values. I need to
take each individual value from <elem2> and see if it exists in <elem1>. If
true is returned, go off and do something..... otherwise get the next value
from <elem2> and compare it to all the values in <elem1> etc etc.

<data>
<elem1>bloggs,smith,jones,bush,howard,bennis</elem1>
<elem2>skeen,seinfield,longshaw,bloggs,keitel</elem2>
</data>


Of course, you could simplify the problem by first converting your input to something more XMLish:

<data>
   <elem1>
       <e>bloggs</e>
       <e>smith</e>
       <e>jones</e>
       <e>bush</e>
       <e>howard</e>
       <e>bennis</e>
   </elem1>
   <elem2>
       <e>skeen</e>
       <e>seinfield</e>
       <e>longshaw</e>
       <e>bloggs</e>
       <e>keitel</e>
   </elem2>
</data>

With Jarno's tokenizer template you could generate such an intermediate file and then take that as input for a second transform:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:key name="e1" match="elem1/e" use="."/>
<xsl:template match="/*">
<result>
<xsl:apply-templates select="elem2/e"/>
<xsl:if test="not(elem1/e = elem2/e)"><not-found/></xsl:if>
</result>
</xsl:template>
<xsl:template match="elem2/e">
<xsl:apply-templates select="key('e1',.)"/>
</xsl:template>
<xsl:template match="elem1/e">
<found><xsl:value-of select="."/></found>
</xsl:template>
</xsl:stylesheet>


that would give <found>bloggs</found> (or <not-found/> if nothing is found).

Note: test="not(elem1/e = elem2/e)" does not mean "the node-sets elem1/e and elem2/e are different", but "there is no elem1/e element that has the same string value as any elem2/e element".

HTH,
Anton


So the approach would be:


Take 'skeen' and compare it to all the comma separated values in <elem1>.
If FALSE is returned, take 'seinfield' and compare to all values in <elem1>
and so on...If TRUE is returned at any stage DO SOMETHING. If at the end
nothing is found, DO SOMETHING DIFFERENT......


Any suggestions on how to do this?


Thanks!

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.