[xsl] length limitations on string input to xsl:analyze-string

Subject: [xsl] length limitations on string input to xsl:analyze-string
From: Heidi L Preston <hpreston@xxxxxxxxxxxxxxx>
Date: Fri, 24 Feb 2006 15:19:09 -0500
I am having difficulty using xsl:analyze-string with some lengthy input
(800+ chars).  Is this a known limitation of analyze-string?  I saw
recently that the regular expression itself is limited to about 30
characters, and I may be pushing the limits with this regular expression,
but it does handle inputs of under 800 chars ok.  If I simplify the regular
expression (which I can't really do without losing semantics required for
analysis),  I notice the allowable string length does increase, but it is
still not handling the inputs I need to deal with.

The error message, occurring on the for-each in the following code,  is:
"SXLM0001: Too many nested apply-templates calls. The stylesheet is
probably looping.
Transformation failed: Run-time errors were reported"
implying recursion, which isn't really the case.  My test input only has
one <type>.

The xsl:

<xsl:template match="/">
  <output>
      <xsl:for-each select="container/*">
        <xsl:apply-templates select="." mode="parse_express"/>
      </xsl:for-each>
  </output>
</xsl:template>

<xsl:template match="type" mode="parse">
  <xsl:param name="string" as="xs:string" select="normalize-space(.)" />
  <type>
      <xsl:variable name="regular_expression" select="'([a-z][a-z0-9_]*)'"
/>

   <xsl:analyze-string select="$string" flags="i"
      regex="^{$regular_expression}\s?=\s?([^;]+)\s?;\s?(.*)$">
     <xsl:matching-substring>
      <xsl:message> ANALYZED STRING SUCCESSFULLY </xsl:message>
      <!-- Deal with regex-groups  -->
      </xsl:matching-substring>
      <xsl:non-matching-substring>
        <xsl:message>
          Error: IN NON-MATCHING SUBSTRING
        </xsl:message>
      </xsl:non-matching-substring>
    </xsl:analyze-string>
  </type>
</xsl:template>

My input is in the following format:
<container>
 <type>
      managed_design_object
      =
      SELECT
      (
      adjacent_stratum_surface_definition
      ,
      adjacent_stratum_surface_embedded_component_surface_definition
      ,
      alias_identification
      ,
      alternate_select_product
      ,
    <!--  ......   limit seems to be about 814 characters.  The input I
need to handle is much greater -->
      )
      ;
      </type>
</container>

Any suggestions, short of tokenizing the string the old fashioned way?
Thanks.









***************************************************************************
Heidi Preston
Electric Boat Corporation
75 Eastern Point Road
Groton, CT 06340
(860) 433-8649

Current Thread