I know how to remove namespaces at all but what I need to do is only to remove specific namespace prefixes eg transform this file (removing xenc prefixes):
&
Try the following stylesheet. It contains the identity transform and a template to strip the namespace of xenc:*
elements. Note that xenc:*
attributes are not handled.
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="xenc:*">
<xsl:element name="{local-name()}" namespace="http://www.w3.org/2001/04/xmlenc#">
<xsl:apply-templates select="node() | @*"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Nearly the same solution as from nwellnhof. But make use of default namesepace in stylesheet.
Add: xmlns="http://www.w3.org/2001/04/xmlenc#"
.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
xmlns="http://www.w3.org/2001/04/xmlenc#" >
<xsl:output indent="yes"/>
<xsl:template match="xenc:*">
<xsl:element name="{local-name()}" >
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>