xsl-list
[Top] [All Lists]

Re: String extraction

2004-09-30 07:27:30
Hi Mukul,

thanks a lot, excellent work!

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">
    <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

--+------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--





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