Re: [xsl] replace a word

Subject: Re: [xsl] replace a word
From: Kamal Bhatt <kbhatt@xxxxxxxxx>
Date: Tue, 13 Dec 2005 16:44:49 +1100
This is correct. sub is not an element, it will therefore only find and replace once.

What you need is a recursive call that will keep recursing till there are no more instances of {sub}.

There are a number of examples of similar situations on the mailing list.

Cheers.

Kamal.

T Uma Shankari wrote:


Greetings to all,


I have to find a word and replace that word with another word.

for example if my xml file is like this means

<question page="6" Queswav="" ChooseType="" id="0" Qno="533" chapter="chapter1" >
<stmt1 mgif1="" mgif="" Qno="533" misc="" >statement1</stmt1>
<opt ptno="1" mgif1="" mgif="" " misc=""


{sub}2{/sub}Option1{sub}5{/sub}</opt>

<opt ptno="1" mgif1="" mgif="" " misc="" >Option2</opt> <opt ptno="1" mgif1="" mgif="" " misc="" >Option3</opt> <opt ptno="1" mgif1="" mgif="" " misc="" >Option4</opt> </question>


i need to find the {sub} and replace it with {/sub} so i have written this code.


xsl:template match="question" name="main">
 <xsl:for-each select="self::question">
           <xsl:variable name="stringques1">
              <h1><b><xsl:value-of select="opt" /></b></h1>
            </xsl:variable>

<xsl:variable name="stringques2">
<xsl:choose>
<xsl:when test="(contains($stringques1,'{sub}'))">
<xsl:value-of select="substring-before($stringques1,'{sub}')"/>
<sub>
<xsl:value-of select="substring-before(substring-after($stringques1,'{sub}'),'{/sub}')"/>


   </sub>
  <xsl:value-of select="substring-after($stringques1,'{/sup}')" />
      </xsl:when>
       <xsl:otherwise>
        <xsl:value-of select="$stringques1"/>
      </xsl:otherwise>
     </xsl:choose>
    </xsl:variable>
 </xsl:for-each>
  </xsl:template>
 </xsl:stylesheet>


It is replacing the first occurance not the oncoming occurance. Can anyone please tell where i am wrong?


regards
uma

Current Thread