Re: [xsl] Remove parent node for the specific child nodes

Subject: Re: [xsl] Remove parent node for the specific child nodes
From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx>
Date: Tue, 12 Feb 2008 14:42:22 +0000
On 12/02/2008, Michael Daniloff <mdanilof@xxxxxxxxx> wrote:
> Using XSLT 1.0, MSXML
>
> I have to transform the following xml file:
>
> <sect>
> <p>
>   <moveFromRangeStart w:id="22"/>
>   <moveFrom id="23">
>                 <r>
>                   <t>want theparagraph to disappear</t>
>                 </r>
>   </moveFrom>
> <p>
>
> <p>
>   <r>
>     <t>leave this</t>
>   </r>
>   <moveFromRangeStart w:id="24"/>
>   <moveFrom id="25">
>                 <r>
>                   <t>more text here</t>
>                 </r>
>   </moveFrom>
> <p>
>
> <p>
>   <r>
>     <t>leave this too</t>
>   </r>
>   <moveFromRangeStart w:id="29"/>
>   <moveFrom id="30">
>                 <r>
>                   <t>more text to be removed here</t>
>                 </r>
>   </moveFrom>
>   <r>
>     <t>and this</t>
>   </r>
> <p>
> </sect>
>
> into this:
>
> <sect>
> <p>
>   <r>
>     <t>leave this</t>
>   </r>
> <p>
>
> <p>
>   <r>
>     <t>leave this too</t>
>   </r>
>   <r>
>     <t>and this</t>
>   </r>
> <p>
> </sect>
>
> As you can see, I have to eliminate moveFrom and
> moveFromRangeStart nodes and if there are no any other
> siblings then remove the parent <p> node.

Use the identity template with:

<xsl:template match="moveFrom|moveFromRangeStart"/>

<xsl:template match="p[count(*) = count(moveFrom|moveFromRangeStart)]"/>

cheers
-- 
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/

Current Thread