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.