The moose likes XML and Related Technologies and the fly likes Concating two strings in XSL Big Moose Saloon
  Search | Java FAQ | Recent Topics
Register / Login


Win a copy of Practical Unit Testing with TestNG and Mockito this week in the Testing forum!
JavaRanch » Java Forums » Engineering » XML and Related Technologies
Reply Bookmark "Concating two strings in XSL" Watch "Concating two strings in XSL" New topic
Author

Concating two strings in XSL

Krishna Mudda
Greenhorn

Joined: Jun 20, 2001
Posts: 10
Hi,
I have an array of textboxes in XSL file and I need to name them uniquely. My idea is to process them in a loop and append the loop variable to the control name. I tried with '+' and '&' but it's not working... Can some one suggest how I can concatenate???

------------------
Mapraputa Is
Leverager of our synergies
Sheriff

Joined: Aug 26, 2000
Posts: 10065
Krishna, are you doing all this in XSLT? If so, you may want to try a different approach. In XSLT variables are inmutable. Once you created a variable, you cannot update its value. What you want can be achieved using position() function: it enumerates nodes when you select them. To concatenate position()�s value with your control name you simply put them together. Assuming your control name has a value �ControlName� you code:
ControlName<xsl:value-of select="position()"/>
and concatenated value is outputted.
If your XML look like:
<?xml version="1.0"?>
<boxes>
<textbox>textbox1</textbox>
<textbox>textbox2</textbox>
<textbox>textbox3</textbox>
<textbox>textbox4</textbox>
</boxes>
you can use XSLT like this:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html><body>
<xsl:for-each select="boxes/textbox">
ControlName<xsl:value-of select="position()"/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
the output is:
ControlName1 ControlName2 ControlName3 ControlName4
Is that what you need?

Uncontrolled vocabularies
"I try my best to make *all* my posts nice, even when I feel upset" -- Philippe Maquet
Krishna Mudda
Greenhorn

Joined: Jun 20, 2001
Posts: 10
Hi Mapraputa,
Thanks for your suggestion. But my requirement is slightly different. Let me be more clear.
Depending on the data I get from server in a XML string with XSL reference in it, I need to create additional rows in the table. So here I need to name the newly added controls so that I can use these names in my validations. So in XSL I need to append a value to control name to make it Unique.
Here concatinated string is to be attached to the name property.
Originally posted by Mapraputa Is:
Krishna, are you doing all this in XSLT? If so, you may want to try a different approach. In XSLT variables are inmutable. Once you created a variable, you cannot update its value. What you want can be achieved using position() function: it enumerates nodes when you select them. To concatenate position()�s value with your control name you simply put them together. Assuming your control name has a value �ControlName� you code:
ControlName<xsl:value-of select="position()"/>
and concatenated value is outputted.
If your XML look like:
<?xml version="1.0"?>
<boxes>
<textbox>textbox1</textbox>
<textbox>textbox2</textbox>
<textbox>textbox3</textbox>
<textbox>textbox4</textbox>
</boxes>
you can use XSLT like this:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html><body>
<xsl:for-each select="boxes/textbox">
ControlName<xsl:value-of select="position()"/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
the output is:
ControlName1 ControlName2 ControlName3 ControlName4
Is that what you need?


------------------
Mapraputa Is
Leverager of our synergies
Sheriff

Joined: Aug 26, 2000
Posts: 10065
Ah, I see now... You want to write something like
<text onclick="validate('textbox123')">
in your XSLT?
Then you define a template and call it recursively with a parameter, decremented each time. For example, if you need to generate 5 text elements, it will look like
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:call-template name="boxGenerator">
<xsl:with-param name="counter" select="5"/>
</xsl:call-template>
</body>
</html>
</xsl:template>
<xsl:template name="boxGenerator">
<xsl :param name="counter"/>
<xsl:if test="$counter != 0">
<xsl:call-template name="boxGenerator">
<xsl:with-param name="counter" select="$counter - 1"/>
</xsl:call-template>
<text onclick="validate('textbox{$counter}')">text</text><br/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
The output will be
<text onclick="validate('textbox1')">text</text>
<text onclick="validate('textbox2')">text</text>
...
<text onclick="validate('textbox5')">text</text>

[This message has been edited by Mapraputa Is (edited June 21, 2001).]
 
 
subject: Concating two strings in XSL
 
Threads others viewed
Calling Setter method of javabean from xsl
Convert multiple xmls to pdf using xsl-fo
xsl variable
escape apostrophe in xsl
how to increase count of a loop in xsl
MyEclipse, The Clear Choice