3

私はこのXML文書を持っています:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="AcquisitionFolder">
            <Directory Id="dir2EE87E668A6861A2C8B6528214144568" Name="bin" />
            <Directory Id="dir99C9EB95694B90A2CD31AD7E2F4BF7F6" Name="Decoders" />
        </DirectoryRef>
    </Fragment>
</Wix>

次の結果を取得したいと思います。

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension>
    <Fragment>
        <DirectoryRef Id="AcquisitionFolder">
            <Directory Id="dir2EE87E668A6861A2C8B6528214144568" Name="bin" />
            <Directory Id="dir99C9EB95694B90A2CD31AD7E2F4BF7F6" Name="Decoders" />
        </DirectoryRef>
    </Fragment>
</Wix>

それは単純な問題のようですが、解決策が見つかりませんでした:-(私はいくつかの試みを行い、いくつかの同様の質問を見つけました(たとえば、これは: XSLT: Add namespace to root element )、しかしそれらは私を助けませんでした.

アドバイスをありがとう!!!

4

1 に答える 1

6

多くの場合、リテラル結果要素の一部として、射影された Xml 要素 (ルートを含む) に名前空間を単純に埋め込むことができます。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/*[local-name()='Wix']">
        <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
             xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
            <xsl:copy-of select="node()|@*"/>
        </Wix>
     </xsl:template>
</xsl:stylesheet>

より正式に/一般的には、出力 xml の名前空間をスタイルシート自体の宣言に (グローバルに、または名前空間エイリアスを使用して)追加できます。

<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:wix="http://www.foo.com/2001/v1"
    ...other namespaces here>

...そして、出力で参照されます

<xsl:template match="/">
    <wix:Wix>
       <wix:Child>
          ...

結果の出力に不要な/未使用の名前空間が残っている場合 (たとえば、ソース ドキュメントでは必要であるが、出力ドキュメントでは必要ない)、これらを次のコマンドで消去できます。exclude-result-prefixes

于 2012-08-21T13:40:44.070 に答える