XSL - kopiowanie elementów, ale usuwanie nieużywanych przestrzeni nazw

Mam XML, który deklaruje przestrzeń nazw używaną tylko dla atrybutów, takich jak ten:

<?xml version="1.0" encoding="UTF-8"?>
<a xmlns:x="http://tempuri.com">
    <b>
        <c x:att="true"/>
        <d>hello</d>
    </b>
</a>

Chcę użyć XSL do utworzenia kopii wybranych węzłów i ich wartości - pozbycie się atrybutów. Więc moim pożądanym wyjściem jest:

<?xml version="1.0" encoding="UTF-8"?>
<b>
    <c />
    <d>hello</d>
</b>

Mam trochę XSL, który prawie to robi, ale nie mogę go zatrzymać, umieszczając deklarację przestrzeni nazw w elemencie najwyższego poziomu danych wyjściowych. Moje XSL to:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/">
        <xsl:apply-templates select="/a/b"/>
    </xsl:template>

    <xsl:template match="node()">
        <xsl:copy>
            <xsl:apply-templates select="node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

Pierwszym elementem wyjścia jest<b xmlns:x="http://tempuri.com"> zamiast<b>. Próbowałem zadeklarować przestrzeń nazw w XSL i umieścić prefiks wexclude-result-prefixes lista, ale to nie wydaje się mieć żadnego efektu. Co ja robię źle?

AKTUALIZACJA: Odkryłem, że deklarując przestrzeń nazw w XSL i używającextension-element-prefixes atrybut działa, ale to nie wydaje się właściwe! Myślę, że mógłbym to wykorzystać, ale chciałbym wiedzieć, dlaczegoexclude-result-prefixes nie działa!

AKTUALIZACJA: Właściwie wygląda na toextension-element-prefixes rozwiązanie działa tylko z wbudowanym silnikiem XMLSpy XSLT, a nie z MSXML.

questionAnswers(4)

yourAnswerToTheQuestion