3

これが私の入力 XML ドキュメントです。

<test xmlns="http://www.example.com/v1">
  <qnameValue xmlns:foo="http://foo.example.com/">foo:bar</qnameValue>
</test>

XSLT (2.0) を使用して、このドキュメントの名前空間を v2 に変更したいと考えています。つまり、目的の出力は次のとおりです。

<test xmlns="http://www.example.com/v2">
  <qnameValue xmlns:foo="http://foo.example.com/">foo:bar</qnameValue>
</test>

私はこのスタイルシートを使用しようとしています:

<xsl:stylesheet version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
     xmlns:previous='http://www.example.com/v1'>
  <xsl:output encoding='UTF-8' indent='yes' method='xml'/>
  <!-- Identity transform -->
  <xsl:template match='@*|node()'>
    <xsl:copy>
      <xsl:apply-templates select='@*|node()'/>
    </xsl:copy>
  </xsl:template>
  <!-- Previous namespace -> current. No other changes required. -->
  <xsl:template match='previous:*'>
    <xsl:element name='{local-name()}' namespace='http://www.example.com/v2'>
      <xsl:apply-templates select='@* | node()' />
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

残念ながら、出力は次のようになります。

<test xmlns="http://www.example.com/v2">
  <qnameValue>foo:bar</qnameValue>
</test>

つまり、qnameValue の重要な名前空間バインディングがなくなりました。すべての名前空間バインディングのコピーを出力に強制する方法はありますか?

4

1 に答える 1