You need to provide more information.
Are you trying to remove any element named "Element"? Maybe you only want to remove the element named element if it has attributes "fruit" and "animal" with values "apple" and "cat" respectively.
You need to provide more information.
Are you trying to remove any element named "Element"? Maybe you only want to remove the element named element if it has attributes "fruit" and "animal" with values "apple" and "cat" respectively.
Using one of the most fundamental XSLT design patterns: "Overriding the identity transformation" one will just write the following:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="Element[@fruit='apple' and @animal='cat']"/> </xsl:stylesheet>
Do note how the second template overrides the identity (1st) template only for elements named "Element" that have an attribute "fruit" with value "apple" and attribute "animal" with value "cat". This template has empty body, which means that the matched element is simply ignored (nothing is produced when it is matched).
When this transformation is applied on the following source XML document:
<doc>... <Element name="same">foo</Element>... <Element fruit="apple" animal="cat" /> <Element fruit="pear" animal="cat" /> <Element name="same">baz</Element>... <Element name="same">foobar</Element>... </doc>
the wanted result is produced:
<doc>... <Element name="same">foo</Element>... <Element fruit="pear" animal="cat"/> <Element name="same">baz</Element>... <Element name="same">foobar</Element>... </doc>
More code snippets of using and overriding the identity template can be found here.