50

いくつかの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を使用しています。

4

3 に答える 3

87

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属性でプレフィックスを指定すると、結果ツリーでの余分な名前空間宣言を回避できます。

于 2009-05-13T09:41:13.100 に答える
15

divoの答えはすでに選択されており、適切に選択されています。

しかし、さらに深く掘り下げることに興味がある場合は、「XSLT の名前空間」という非常に人気のあるトピックに関する私の最高傑作の「名前空間が多すぎます」セクションを調べてください。(はい、それは冗談のつもりです。:-) )

于 2009-05-13T10:17:38.547 に答える
-4

extension-element-prefixes="Namespace"を使用します

お気に入り:

<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:datetime="http://exslt.org/dates-and-times"
xmlns:str="http://exslt.org/strings"
xmlns:exsl="http://exslt.org/common"
xmlns:uw="xalan://ru.sbtc.util.XSLUtil"
extension-element-prefixes="exsl str datetime uw"
version="1.0">
于 2009-05-13T09:40:48.047 に答える