web-dev-qa-db-ja.com

XSL:名前空間定義を結果のXMLドキュメントにエクスポートしない

いくつかのXMLファイルからデータを取得し、それらを新しいXMLドキュメントに変換したいと思います。ただし、結果ドキュメントでXSLTの名前空間の定義が発生するのは望ましくありません。

言い換えると:

ソース:

<Namespace:Root xmlns:Namespace="http://www.something.com">

スタイルシート:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:Namespace="http://www.something.com">

結果:

<resultRoot xmlns:Namespace="http://www.something.com">
<!--I don't want the Namespace definition above-->

変換にmsxslを使用しています。

41
pypmannetjies

exclude-result-prefixes要素のxsl:stylesheet属性を使用して、名前空間プレフィックスを出力ドキュメントに送信しないようにすることができます。

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
         xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
         xmlns:prefix1="http://www.something.com"
         exclude-result-prefixes="prefix1">

</xsl:stylesheet>

出力ドキュメントから複数のネームスペースを抑制するには、それらを空白で区切って指定します。

exclude-result-prefixes="prefix1 prefix2 prefix3"

XSLT仕様 から:

スタイルツリーがソースツリーのアドレス指定のみを目的として名前空間宣言を使用する場合、exclude-result-prefixes属性でプレフィックスを指定すると、結果ツリーでの余分な名前空間宣言を回避できます。

72
Dirk Vollmar

divoの答えはすでに選ばれています。

しかし、もっと深く掘り下げることに興味がある場合は、「XSLTの名前空間」という非常に人気のあるトピックに関する私の大作の "Too many namespaces" セクションをチェックしてください。 (はい、それは冗談です:-))

13
Evan Lenz