xsl-list
[Top] [All Lists]

Re: Moving nested elements to root level

2005-05-27 09:36:37
jpk writes:
I am in need of a transform that moves all instances
of a given element to the root level.  So given the
target element name is 'br' and this as input:

<p>
  <strong>
    strong:text(top) <br/>prefix
      <span style="a style">
        span a 
        <span style="rgb();">
          span b<br/> text
        </span>
        text
       </span>
    strong:text(btm) <br/>suffix<br/>
  </strong>
  Root level text with<br/> tag.
</p>


I want to get something like this:

<p>
  <strong>
    strong:text(top) 
  </strong>
  <br/>
...

Just a guess:

1. Use the identity transformation to copy everything by default:

<xsl:template name="identity" match="@*|node()" mode="#all">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

2. Write a template for the p target element that augments the identity
   transformation with its br descendants:

<xsl:template match="p">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()|*//br"/ mode="copy">
  </xsl:copy>
</xsl:template>

3. Plus a template to suppress the br elements in their original place
   in the tree:

<xsl:template match="br" mode="#default">
</xsl:template>

I added the mode attributes to the templates last, to try to distinguish
when the identity and suppress templates should be applied to the br
elements.

-- 
Kevin Rodgers


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