Предположительно, префикс пространства имен "i" в некотором содержащем элементе связан с http://www.w3.org/2001/XMLSchema-instance
. Если это так, то ваш документ не будет действительным для xsd-schema, если вы удалите объявление пространства имен d6p1
. Это связано с тем, что атрибут xsi:type
(как его обычно пишут) должен быть QName, и чтобы быть действительным QName, префиксная часть (в данном случае d6p1
) должна быть объявлена.
Теперь, возможно, вам не требуется, чтобы ваш документ был действительным для схемы. В этом случае я бы избавился и от атрибута i:type
. Сохранение атрибута, но потеря объявления пространства имен, которое придает ему значение, кажется действительно плохой идеей.
Если вы хотите избавиться от атрибута и пространства имен, с XSLT это достаточно просто.
СПУСТЯ
Глядя на ваш вопрос более внимательно, я вижу, что вы действительно хотите избавиться как от атрибута, так и от объявления пространства имен. Код XSLT для этого (для всех элементов):
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="{namespace-uri()}">
<xsl:apply-templates select="@*|*"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="@i:type"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"/>
Первое правило копирует элементы без изменений, но без сохранения неиспользуемых пространств имен; второе правило копирует атрибуты без изменений; третье правило удаляет атрибут i:type
.