xsl-list
[Top] [All Lists]

Re: convert large array to several smaller arrays containing max N elements

2003-11-11 16:03:36
David,

This is where you code is broken:

At 05:14 PM 11/11/2003, you wrote:
      <xsl:if test="position() mod 2 = '0'">
         </topgroup>
         <topgroup>
      </xsl:if>

This is not well-formed XML. The parser is seeing the </topgroup> end tag here; its error message is complaining that it's the wrong end tag. The only end tag allowed where you have "</topgroup>" is </xsl:if>.

So, you ask, what do I do if I can't "close" an element and "open" another one? Hint: XSLT is not a set of string-writing routines, and it doesn't work by writing tags to the output. Instead, it builds trees. Instead of

<xsl:template match="/">
   <topgroup>
   <xsl:for-each select="//WorkOrder/lineService">
      <TEABTN>
<NPA><xsl:value-of select="normalize-space(tpExistAcctBillTelNo/npa)"/></NPA> <NXX><xsl:value-of select="normalize-space(tpExistAcctBillTelNo/nxx)"/></NXX> <XXXX><xsl:value-of select="normalize-space(tpExistAcctBillTelNo/xxxx)"/></XXXX>
      </TEABTN>
      <xsl:if test="position() mod 2 = '0'">
         </topgroup>
         <topgroup>
      </xsl:if>
   </xsl:for-each>
   </topgroup>
</xsl:template>

you want something like

<xsl:template match="/">
  <xsl:for-each select="//WorkOrder/lineService[position() mod 2 = 1]">
   <topgroup>
     <xsl:for-each select=".|following-sibling::lineService[1]">
      <TEABTN>
<NPA><xsl:value-of select="normalize-space(tpExistAcctBillTelNo/npa)"/></NPA> <NXX><xsl:value-of select="normalize-space(tpExistAcctBillTelNo/nxx)"/></NXX> <XXXX><xsl:value-of select="normalize-space(tpExistAcctBillTelNo/xxxx)"/></XXXX>
      </TEABTN>
  </topgroup>
  </xsl:for-each>
</xsl:template>

The difference between this and what you had is that it specifies a set of *nodes* to be added to the result *tree* -- not just write a bunch of tags (which hopefully will parse). Not incidentally, the stylesheet template itself is well-formed XML, and will parse.

It's completely different from, say, the way Javascript writes HTML tagging to browser windows.

Cheers,
Wendell



======================================================================
Wendell Piez                            
mailto:wapiez(_at_)mulberrytech(_dot_)com
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
  Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================


XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list