Re: [xsl] something like merge subparts of a branche

Subject: Re: [xsl] something like merge subparts of a branche
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Tue, 26 Apr 2005 12:13:02 -0400
Simon,

Your problem is a tough one; for whatever reason (it'd be interesting to know) it's lately been coming up with increasing frequency. It was even discussed on the list not long ago -- see

http://www.biglist.com/lists/xsl-list/archives/200504/msg00620.html

and the cascade of messages following.

The short version: you have a range of options, including a couple of techniques (key-driven grouping by proximity; "tree walking") that are more complex than most standard techniques in XSLT 1.0, as well as the widely-disparaged "tag writing" solution. Alternatively, you might also be able to design around this requirement (XSLT 1.0 was designed for more straightforward "down-conversions") either by changing the design of your source or your target. And finally, XSLT 2.0 presents better options for handling this kind of thing....

If I had to solve this in XSLT 1.0 I'd probably use the "tree-walking" technique but I might opt to group by proximity using keys.

I hope this helps.

Cheers,
Wendell

At 05:25 AM 4/26/2005, you wrote:
hi list

i'm pretty new to xsl and try to solve a problem that goes over my
abilities. but maybe somebody can help me.
i'm working with apache-lenya.
the problem is like this.
i have a source tree like this.

<p>
   <a href="http://www.hello.ch/"; title="">
     minus eins und null
   </a>
   <object data="important.gif" href="" title="important"
type="image/gif">erstes</object>
   <a href="http://www.hello.ch/"; title="">
     eins zwei
   </a>
   drei und noch was
   <object data="important.gif" href="" title="important"
type="">zweites</object>
   vier und noch mehr
   <a href="http://www.hello.ch/"; title="">
     fuenf sechs
   </a>
</p>

and the result should be like this:

<p>
   <a href="http://www.hello.ch/"; title="">
     minus eins und null
   </a>
</p>
<p>
   <object data="important.gif" href="" title="important"
type="image/gif">erstes</object>
</p>
<p>
   <a href="http://www.hello.ch/"; title="">
     eins zwei
   </a>
   drei und noch was
</p>
<p>
   <object data="important.gif" href="" title="important"
type="">zweites</object>
</p>
<p>
   vier und noch mehr
   <a href="http://www.hello.ch/"; title="">
     fuenf sechs
   </a>
</p>

at the moment my xsl looks like that.

<xsl:template match="xhtml:p[xhtml:object]" priority="3">

    <xsl:choose>
      <xsl:when test="node()[not(self::xhtml:object) and
normalize-space() != '']">

        <xsl:for-each select="node()">
          <xsl:choose>
            <xsl:when test="self::xhtml:object">

              <xsl:apply-templates
select="self::xhtml:object"></xsl:apply-templates>

            </xsl:when>
            <xsl:otherwise>
            <p>
              <xsl:apply-templates select="."></xsl:apply-templates>
            </p>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:for-each>

      </xsl:when>
      <xsl:otherwise>

<xsl:apply-templates select="xhtml:object"/>

      </xsl:otherwise>
    </xsl:choose>

</xsl:template>


but it's certainly not like that. i do not know how to merge the all siblings befor an xhtml:object under a paragraf but not the xhtml:object. and then merge again the nodes between the xhtml:object and so on.

i tried different ways.
for example a for-each for each xhtml:object and then get the siblings
around xhtml:object with preceding-sibling/following-sibling. the
problem with this aproach is that if there ar several xhtml:object in
the paragraph i don't know how to limit the following-sibling just to
the next xhtml:object.

i'm not sure my explanation is good enough.
anyway thanks for any help.
simon


======================================================================
Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
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
======================================================================

Current Thread