RE: [xsl] removing nodes according to attibute value

Subject: RE: [xsl] removing nodes according to attibute value
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 1 Nov 2005 16:04:56 -0000
> I'm trying to remove all elements that have a specific 
> attribute containing 
> some characters.

Start with an identity template that copies everything:

<xsl:template match="*">
  <xsl:copy><xsl:copy-of select="@*"/><xsl:apply-templates/></xsl:copy>
</xsl:template>

> See example below... I need to remove all 
> /ApplicationCatalogue/Category/Product that have @code 
> starting with TT.

Add a template rule that doesn't copy such elements:

<xsl:template match="Product[starts-with(@code, 'TT')]"/>


> It has to be generic as the xml provided can have more attributes & 
> elements.
> Also I would need to remove the 
> /ApplicationCatalogue/Category if it doesn't 
> have any Product left after the removal

Add another template rule:

<xsl:template match="Category[not(Product[not(starts-with(@code, 'TT))])]"/>

Michael Kay
http://www.saxonica.com/


> Any idea ??? Thanx a million ...
> 
> 
> <ApplicationCatalogue name="42222_downloads_stg">
>  <Category name="2_live_crew" description="2_live_crew">
>   <Product code="TT050089891" position="0">
>    <Alias isDefault="true">
>     <Name>89891</Name>
>     <Extra></Extra>
>    </Alias>
>    <Attributes>
>     <OTAobject_otaother_namepreview>Getting 
> High</OTAobject_otaother_namepreview>
>     <OTAobject_otaother_author>2 Live Crew</OTAobject_otaother_author>
>    </Attributes>
>   </Product>
>   <Product code="PP050089892" position="0">
>    <Alias isDefault="true">
>     <Name>89892</Name>
>     <Extra></Extra>
>    </Alias>
>    <Attributes>
>     <OTAobject_otaother_namepreview>Pimp Of The 
> Year</OTAobject_otaother_namepreview>
>     <OTAobject_otaother_author>2 Live Crew</OTAobject_otaother_author>
>    </Attributes>
>   </Product>
>   <Product code="PP050089893" position="0">
>    <Alias isDefault="true">
>     <Name>89893</Name>
>     <Extra></Extra>
>    </Alias>
>    <Attributes>
>     <OTAobject_otaother_namepreview>Shake Junk 
> Queen</OTAobject_otaother_namepreview>
>     <OTAobject_otaother_author>2 Live Crew</OTAobject_otaother_author>
>    </Attributes>
>   </Product>
>   <Product code="TT050089894" position="0">
>    <Alias isDefault="true">
>     <Name>89894</Name>
>     <Extra></Extra>
>    </Alias>
>    <Attributes>
>     <OTAobject_otaother_namepreview>Stop 
> Playin</OTAobject_otaother_namepreview>
>     <OTAobject_otaother_author>2 Live Crew</OTAobject_otaother_author>
>    </Attributes>
>   </Product>
>  </Category>
> </ApplicationCatalogue>

Current Thread