私はこれに関して私がすべきよりも少し多くの問題を抱えており、正しいと思われる解決策を見つけることができませんでした:
xslt 1.0を使用してXMLドキュメントの名前空間を変更したいだけです。javaアプリケーションで使用され、javax.xml.transformを使用します。
これは私のxmlドキュメントです:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root xmlns="http://namespace1.org" type="Document" version="V2_2">
<Content>
<Text>asdf</Text>
</Content>
</Root>
これは、変換後の外観です。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root xmlns="http://namespace2.org" type="Document" version="V2_2">
<Content>
<Text>asdf</Text>
</Content>
</Root>
これは私のxsltコードです:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://namespace2.org">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="http://namespace2.org">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
そして、これは私が変換後に得た実際の出力です:
<?xml version="1.0" encoding="UTF-8"?>
<ns0:Root xmlns:ns0="http://namespace2.org">2012-11-02T15:39:46.05+01:00DocumentV2_2<ns1:Content xmlns:ns1="http://namespace2.org">
<ns2:Text xmlns:ns2="http://namespace2.org">asdf</ns2:Text>
</ns1:Content>
</ns0:Root>
多くのプレフィックスを追加する方法がありますが、私は望んでいません。
次のxlstを使用して、ns+incrementプレフィックスを取り除くことができました。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://namespace2.org"
xmlns:cmp="http://namespace2.org"
exclude-result-prefixes="cmp">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:element name="cmp:{name()}" namespace="http://namespace2.org">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
これにより、次の出力が生成されます。
<?xml version="1.0" encoding="UTF-8"?>
<cmp:Root xmlns:cmp="http://namespace2.org" type="Document" version="V2_2">
<cmp:Content>
<cmp:Text>asdf</cmp:Text>
</cmp:Content>
</cmp:Root>
しかし、「cmp」プレフィックスを取り除くことができませんでした。
どのように私が望ましい出力を達成することができるかについてのアイデアはありますか?