1

ルート要素に名前空間のみを追加するにはどうすればよいですか?

私のXML:

<Envelope>
    <from>
        <contents />
    </from>
</Envelope>

私の希望する出力:

<Envelope xmlns:tns="Foo">
    <from>
        <contents />
    </from>
</Envelope>

「xmlns:tns = ..」ではなく、これを使用して「xmlns='Foo'」のみを取得できます。

<xsl:element name="{local-name()}" namespace="Foo" >
        <xsl:copy-of select="attribute::*"/>
        <xsl:apply-templates />
</xsl:element>
4

1 に答える 1

2

これが完全な変換です:

<xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:tns="Foo">
     <xsl:output omit-xml-declaration="yes" indent="yes"/>
     <xsl:strip-space elements="*"/>

     <xsl:template match="node()|@*">
         <xsl:copy>
           <xsl:apply-templates select="node()|@*"/>
         </xsl:copy>
     </xsl:template>

     <xsl:template match="/*">
      <xsl:element name="{name()}">
       <xsl:copy-of select=
        "document('')/*/namespace::*[name()='tns']"/>
       <xsl:apply-templates/>
      </xsl:element>
     </xsl:template>
</xsl:stylesheet>

この変換が提供されたXMLドキュメントに適用される場合

<Envelope>
    <from>
        <contents />
    </from>
</Envelope>

必要な正しい結果が生成されます。

<Envelope xmlns:tns="Foo">
   <from>
      <contents/>
   </from>
</tns:Envelope>
于 2012-05-22T12:08:27.753 に答える