xsl-list
[Top] [All Lists]

Re: String extraction

2004-09-30 07:24:47
Hi Sven,
  Please try this XSL -

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

<xsl:output method="html" indent="yes"/>
        
<xsl:template match="/top">
  <xsl:variable name="str1"
select="substring-before(., '(')"/>
  <xsl:variable name="str2">
    <xsl:choose>
      <xsl:when test="contains(substring-after(.,
'('), ',')">
        <xsl:value-of
select="substring-before(substring-after(., '('),
',')"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of
select="substring-before(substring-after(., '('),
')')"/>
      </xsl:otherwise>
    </xsl:choose>
   </xsl:variable>
   <xsl:variable name="str3"
select="substring-before(substring-after(., ','),
')')"/>         
   <html>
     <head>
       <title/>
     </head>
     <body>
       <table>
         <tr>
           <td>
             <xsl:value-of select="$str1"/>
           </td>
           <td>
             <xsl:value-of select="$str2"/>
           </td>
         </tr>
         <xsl:call-template name="generateTRs">
           <xsl:with-param name="str" select="$str3"/>
           <xsl:with-param name="delim" select="','"/>
         </xsl:call-template>
       </table>
     </body>
   </html>
</xsl:template>
        
<!-- a recursive template to generate <tr>s -->
<xsl:template name="generateTRs">
  <xsl:param name="str"/>
  <xsl:param name="delim"/>
  
  <xsl:choose>
    <xsl:when test="contains($str, ',')">
      <tr>
       <td/>
       <td>
         <xsl:value-of select="substring-before($str, ',')"/>
       </td>
      </tr>
      <xsl:call-template name="generateTRs">
        <xsl:with-param name="str"
select="substring-after($str, ',')"/>
        <xsl:with-param name="delim" select="$delim"/>
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <tr>
        <td/>
        <td>
          <xsl:value-of select="$str"/>
        </td>
      </tr>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>

Regards,
Mukul

--- Sven Waibel <sven(_dot_)waibel(_at_)imbus(_dot_)de> wrote:

Hi Mukul,

that's a very good example, but i don't know how
many p exist. So i don't know how many variables i
have to create.

Sven

Mukul Gandhi wrote:

Hi Sven,
  Please try this XSL -

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output method="html" indent="yes"/>
    
<xsl:template match="/top">
  <xsl:variable name="str1"
select="substring-before(., '(')"/>
  <xsl:variable name="str2"
select="substring-before(substring-after(., '('),
',')"/>
  <xsl:variable name="str3"


select="substring-before(substring-after(substring-after(.,
'('), ','), ',')"/>
  <xsl:variable name="str4"


select="substring-before(substring-after(substring-after(substring-after(.,
'('), ','), ','), ')')"/>
  <html>
    <head>
      <title/>
    </head>
    <body>
      <table>
    <tr>
     <td><xsl:value-of select="$str1" /></td>
     <td><xsl:value-of select="$str2" /></td>
    </tr>
    <tr>
     <td/>
     <td><xsl:value-of select="$str3" /></td>
    </tr>
    <tr>
     <td/>
     <td><xsl:value-of select="$str4" /></td>
    </tr>
      </table>
    </body>
  </html>
</xsl:template>
    
</xsl:stylesheet>

When the above XSL is applied to XML -

<?xml version="1.0" encoding="UTF-8"?>
<top>person(p1,p2,p3)</top>

it produces the desired output.

Regards,
Mukul

--- Sven Waibel <sven(_dot_)waibel(_at_)imbus(_dot_)de> wrote:


Hello,

how can i extract a string from a string:

person(p1,p2,p3)

I need a table:

person p1
    p2
    p3

I don't know anything about length of p1,p2 or p3.

Is is possible?

Regards
Sven


                
_______________________________
Do you Yahoo!?
Declare Yourself - Register online to vote today!
http://vote.yahoo.com


<Prev in Thread] Current Thread [Next in Thread>