次のように、属性にのみ使用される名前空間を宣言する XML があります。
<?xml version="1.0" encoding="UTF-8"?>
<a xmlns:x="http://tempuri.com">
<b>
<c x:att="true"/>
<d>hello</d>
</b>
</a>
XSL を使用して、選択したノードとその値のコピーを作成し、属性を削除したいと考えています。したがって、私の望ましい出力は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<b>
<c />
<d>hello</d>
</b>
ほとんどこれを行う XSL をいくつか持っていますが、名前空間宣言を出力の最上位要素に入れることを止めることはできないようです。私のXSLは:
<?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>
出力の最初の要素は、<b xmlns:x="http://tempuri.com">
代わりに です<b>
。XSL で名前空間を宣言し、プレフィックスをexclude-result-prefixes
リストに追加しようとしましたが、効果がないようです。私は何を間違っていますか?
更新: XSL で名前空間を宣言し、属性を使用することで機能することがわかりましたextension-element-prefixes
が、これは正しくないようです! これなら使えると思うのですが、なぜexclude-result-prefixes
使えないのか知りたいです!
更新: 実際には、このextension-element-prefixes
ソリューションは XMLSpy の組み込み XSLT エンジンでのみ動作し、MSXML では動作しないようです。