Это преобразование :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:element name="{name()}" namespace="{namespace-uri()}">
<xsl:copy-of select=
"namespace::*[not(.='i:i')]"/>
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*[namespace-uri()='i:i']"/>
<xsl:template match="@*">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному документу XML:
<text id="1" xmlns:i="i:i"
i:knockout="Off"
i:objectType="pointText"
style="font-size:16;">Hi</text>
создает искомый, правильный результат:
<text id="1" style="font-size:16;">Hi</text>
ОБНОВЛЕНИЕ : ОП теперь указал точное пространство имен, к которому привязан префикс "i"
.
В этомЕсли простая замена "i:i"
на http://ns.adobe.com/AdobeIllustrator/10.0/
дает нам новое решение:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="pUnwantedNS" select="'http://ns.adobe.com/AdobeIllustrator/10.0/'"/>
<xsl:template match="*">
<xsl:element name="{name()}" namespace="{namespace-uri()}">
<xsl:copy-of select="namespace::*[not(.=$pUnwantedNS)]"/>
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match=
"@*[namespace-uri()='http://ns.adobe.com/AdobeIllustrator/10.0/']"/>
</xsl:stylesheet>
и при применении к недавно предоставленному XML-документу:
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
i:viewOrigin="-39.4106 906.6265"
i:rulerOrigin="0 0"
i:pageBounds="0 840 592 0" >
<g i:extraneous="self"></g>
</svg>
снова выдается желаемый, правильный результат :
<svg xmlns="http://www.w3.org/2000/svg">
<g />
</svg>