Connecting Tech Pros Worldwide Help | Site Map

merging two sequences in xslt

  #1  
Old October 15th, 2008, 03:35 PM
JMan
Guest
 
Posts: n/a
Hi,
i have some xml that looks like this:

<parent>
<a>1,2,3,4,5,6,7,8</a>
<b>a,b,c,d,e,f,g,h</b>
</parent>

what i need i this:
<parent>
<ab>a 1 b 2 c 3 d 4 ...</ab>
</parent>

How can i do this? I thought of tokenizing the values of <aand <b>
into sequences, but i dont know how to merge them together.
Does anybody has a solution to this problem?

cheers, Johannes
  #2  
Old October 15th, 2008, 03:45 PM
dahu
Guest
 
Posts: n/a

re: merging two sequences in xslt


May be using fn:string-join ?

http://www.xqueryfunctions.com/xq/fn_string-join.html

JMan wrote:
Quote:
Hi,
i have some xml that looks like this:
>
<parent>
<a>1,2,3,4,5,6,7,8</a>
<b>a,b,c,d,e,f,g,h</b>
</parent>
>
what i need i this:
<parent>
<ab>a 1 b 2 c 3 d 4 ...</ab>
</parent>
>
How can i do this? I thought of tokenizing the values of <aand <b>
into sequences, but i dont know how to merge them together.
Does anybody has a solution to this problem?
>
cheers, Johannes
  #3  
Old October 15th, 2008, 03:55 PM
JMan
Guest
 
Posts: n/a

re: merging two sequences in xslt


Well, to use fn:string join i would still need to first merge the two
sequences together wouldn't i?

cheers, Johannes

On 15 Okt., 16:42, dahu <d...@dahu.frwrote:
Quote:
May be using fn:string-join ?
>
http://www.xqueryfunctions.com/xq/fn_string-join.html
>
JMan wrote:
Quote:
Hi,
i have some xml that looks like this:
>
Quote:
<parent>
<a>1,2,3,4,5,6,7,8</a>
<b>a,b,c,d,e,f,g,h</b>
</parent>
>
Quote:
what i need i this:
<parent>
<ab>a 1 b 2 c 3 d 4 ...</ab>
</parent>
>
Quote:
How can i do this? I thought of tokenizing the values of <aand <b>
into sequences, but i dont know how to merge them together.
Does anybody has a solution to this problem?
>
Quote:
cheers, Johannes
  #4  
Old October 15th, 2008, 04:05 PM
Martin Honnen
Guest
 
Posts: n/a

re: merging two sequences in xslt


JMan wrote:
Quote:
Hi,
i have some xml that looks like this:
>
<parent>
<a>1,2,3,4,5,6,7,8</a>
<b>a,b,c,d,e,f,g,h</b>
</parent>
>
what i need i this:
<parent>
<ab>a 1 b 2 c 3 d 4 ...</ab>
</parent>
>
How can i do this? I thought of tokenizing the values of <aand <b>
into sequences, but i dont know how to merge them together.

<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">

<xsl:template match="parent">
<xsl:copy>
<xsl:variable name="l1" as="xs:string*" select="tokenize(a, ',')"/>
<xsl:variable name="l2" as="xs:string*" select="tokenize(b, ',')"/>
<ab>
<xsl:value-of select="for $p in 1 to count($l1) return
($l2[$p], $l1[$p])" separator=" "/>
</ab>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>



--

Martin Honnen
http://JavaScript.FAQTs.com/
  #5  
Old October 15th, 2008, 05:05 PM
JMan
Guest
 
Posts: n/a

re: merging two sequences in xslt


Hi Martin,

thanks for your reply. Its actually not yet working for me. l1 and l2
are of count==1 so what i get is pretty much what i put in. There
seems to be a problem with assiging the sequences to the veriables.
Can you fix it?

thanks, Johannes
Quote:
JMan wrote:
Quote:
Hi,
i have some xml that looks like this:
>
Quote:
<parent>
<a>1,2,3,4,5,6,7,8</a>
<b>a,b,c,d,e,f,g,h</b>
</parent>
>
Quote:
what i need i this:
<parent>
<ab>a 1 b 2 c 3 d 4 ...</ab>
</parent>
>
Quote:
How can i do this? I thought of tokenizing the values of <aand <b>
into sequences, but i dont know how to merge them together.
>
<xsl:stylesheet
* *xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
* *xmlns:xs="http://www.w3.org/2001/XMLSchema"
* *exclude-result-prefixes="xs"
* *version="2.0">
>
* *<xsl:template match="parent">
* * *<xsl:copy>
* * * *<xsl:variable name="l1" as="xs:string*" select="tokenize(a, ',')"/>
* * * *<xsl:variable name="l2" as="xs:string*" select="tokenize(b, ',')"/>
* * * *<ab>
* * * * *<xsl:value-of select="for $p in 1 to count($l1) return
($l2[$p], $l1[$p])" separator=" "/>
* * * *</ab>
* * *</xsl:copy>
* *</xsl:template>
>
</xsl:stylesheet>
>
--
>
* * * * Martin Honnen
* * * *http://JavaScript.FAQTs.com/
  #6  
Old October 15th, 2008, 05:15 PM
JMan
Guest
 
Posts: n/a

re: merging two sequences in xslt


Martin!
thanks alot!

cheers, Johannes

On 15 Okt., 17:02, Martin Honnen <mahotr...@yahoo.dewrote:
Quote:
JMan wrote:
Quote:
Hi,
i have some xml that looks like this:
>
Quote:
<parent>
<a>1,2,3,4,5,6,7,8</a>
<b>a,b,c,d,e,f,g,h</b>
</parent>
>
Quote:
what i need i this:
<parent>
<ab>a 1 b 2 c 3 d 4 ...</ab>
</parent>
>
Quote:
How can i do this? I thought of tokenizing the values of <aand <b>
into sequences, but i dont know how to merge them together.
>
<xsl:stylesheet
* *xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
* *xmlns:xs="http://www.w3.org/2001/XMLSchema"
* *exclude-result-prefixes="xs"
* *version="2.0">
>
* *<xsl:template match="parent">
* * *<xsl:copy>
* * * *<xsl:variable name="l1" as="xs:string*" select="tokenize(a, ',')"/>
* * * *<xsl:variable name="l2" as="xs:string*" select="tokenize(b, ',')"/>
* * * *<ab>
* * * * *<xsl:value-of select="for $p in 1 to count($l1) return
($l2[$p], $l1[$p])" separator=" "/>
* * * *</ab>
* * *</xsl:copy>
* *</xsl:template>
>
</xsl:stylesheet>
>
--
>
* * * * Martin Honnen
* * * *http://JavaScript.FAQTs.com/
  #7  
Old October 15th, 2008, 05:35 PM
JMan
Guest
 
Posts: n/a

re: merging two sequences in xslt


can i change the datatypes of the lists, so that i can do something
like
<xsl:value-of select="for $p in 1 to count($l1) return ($l2[$p] div
10 , $l1[$p] div 10)" separator=" "/?

cheers, Johannes

On 15 Okt., 18:09, JMan <JohannesElsingho...@gmail.comwrote:
Quote:
Martin!
thanks alot!
>
cheers, Johannes
>
On 15 Okt., 17:02, Martin Honnen <mahotr...@yahoo.dewrote:
>
Quote:
JMan wrote:
Quote:
Hi,
i have some xml that looks like this:
>
Quote:
Quote:
<parent>
<a>1,2,3,4,5,6,7,8</a>
<b>a,b,c,d,e,f,g,h</b>
</parent>
>
Quote:
Quote:
what i need i this:
<parent>
<ab>a 1 b 2 c 3 d 4 ...</ab>
</parent>
>
Quote:
Quote:
How can i do this? I thought of tokenizing the values of <aand <b>
into sequences, but i dont know how to merge them together.
>
Quote:
<xsl:stylesheet
* *xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
* *xmlns:xs="http://www.w3.org/2001/XMLSchema"
* *exclude-result-prefixes="xs"
* *version="2.0">
>
Quote:
* *<xsl:template match="parent">
* * *<xsl:copy>
* * * *<xsl:variable name="l1" as="xs:string*" select="tokenize(a, ',')"/>
* * * *<xsl:variable name="l2" as="xs:string*" select="tokenize(b, ',')"/>
* * * *<ab>
* * * * *<xsl:value-of select="for $p in 1 to count($l1) return
($l2[$p], $l1[$p])" separator=" "/>
* * * *</ab>
* * *</xsl:copy>
* *</xsl:template>
>
Quote:
</xsl:stylesheet>
>
Quote:
--
>
Quote:
* * * * Martin Honnen
* * * *http://JavaScript.FAQTs.com/
  #8  
Old October 15th, 2008, 05:55 PM
Martin Honnen
Guest
 
Posts: n/a

re: merging two sequences in xslt


JMan wrote:
Quote:
can i change the datatypes of the lists, so that i can do something
like
<xsl:value-of select="for $p in 1 to count($l1) return ($l2[$p] div
10 , $l1[$p] div 10)" separator=" "/?
I don't understand how you expect the values a,b,c and so on to be
treated as numbers.

However let's assume you have different input data

<parent>
<a>1,2,3,4,5,6,7,8</a>
<b>10,20,30,40,50,60,70,80</b>
</parent>

then you can of course convert the string sequence the tokenize function
gives you to a number sequence:

<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">

<xsl:template match="parent">
<xsl:copy>
<xsl:variable name="l1" as="xs:double*" select="for $item in
tokenize(a, ',') return xs:double($item)"/>
<xsl:variable name="l2" as="xs:double*" select="for $item in
tokenize(b, ',') return xs:double($item)"/>
<ab>
<xsl:value-of select="for $p in 1 to count($l1) return ($l2[$p]
div 10, $l1[$p] div 10)" separator=" "/>
</ab>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>
--

Martin Honnen
http://JavaScript.FAQTs.com/
Closed Thread